728x90
<문제 설명>
https://www.acmicpc.net/problem/5692
팩토리얼 진법에서는 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
반응형
'알고리즘' 카테고리의 다른 글
[자료구조] 해시(Hash) (0) | 2022.03.10 |
---|---|
[백준 브론즈2] 진법 변환.py (0) | 2022.03.09 |
[프로그래머스 lv 1] [1차] 비밀지도.py (0) | 2022.03.04 |
[자료구조] 진법변환, 비트연산 (0) | 2022.03.03 |
[자료구조] DFS(깊이 우선 탐색), BFS(너비 우선 탐색) (0) | 2022.03.02 |