알고리즘
[백준 브론즈3] 팩토리얼 진법.py
파뱁
2022. 3. 7. 00:19
728x90
<문제 설명>
https://www.acmicpc.net/problem/5692
5692번: 팩토리얼 진법
상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다.
www.acmicpc.net
팩토리얼 진법에서는 i번 자리의 값을 ai×i!로 계산한다. 즉, 팩토리얼 진법에서 719는 10진법에서 53과 같다. 그 이유는 7×3! + 1×2! + 9×1! = 53이기 때문이다.
팩토리얼 진법으로 작성한 숫자가 주어졌을 때, 10진법으로 읽은 값을 리턴하면 되는 문제이다.
입출력의 예는 다음과 같다.
예제 입력 1
719
1
15
110
102
0
예제 출력 1
53
1
7
8
8
<문제 풀이 아이디어>
n값이 주어질때 1~n까지의 팩토리얼을 구하는 함수를 만든다. n! = 1*2*...*n 이므로 이를 구현할 수 있는 함수를 만든다.
(참고 n는 5이하이다. 주어지는 숫자는 5자리 이하이기 때문이다.)
1~n까지의 팩토리얼을 구하면 이를 배열로 받아와서 각 자리에 있는 수를 곱하고 이를 다 더하여 반환하면 10진수로 표현한 숫자가 나온다.
<문제 풀이 코드>
import sys
def fact(n):
array = []
tmp = 1
for i in range(1,n+1):
tmp *= i
array.append(tmp)
return array
while(True):
n = int(sys.stdin.readline())
if n==0:
break
nLen = len(str(n))
factArray = fact(nLen)
nArray = list(map(int,list(str(n))))
result = 0
for i in range(nLen):
result += nArray[i]*factArray[nLen-1-i]
print(result)
728x90
반응형