https://www.acmicpc.net/problem/5692
문제
주어진 수가 팩토리얼 진법으로 표현된 수일 때 이를 10 진법으로 바꿔주는 문제이다.
10 진법은 $ i $ 번째 자리의 수가 $ a $ 일 때 이를 $ a \times 10^i $ 로 본다면 팩토리얼 진법에서는 $ a \times i! $ 로 본다고 한다.
풀이
그대로 따라서 변환해주면 된다.
주어진 수를 각 자리와 값으로 나눠주고, 위 팩토리얼 진법을 통해 계산하면 된다.
첫 번째 자리부터 계산하는 것이 편하므로 주어진 수를 문자열로 입력받아 반전시켜주고, enumerate를 통해 index와 값을 가져와준다. 이때 index+1은 자리이다.
가져온 값과 index+1의 팩토리얼을 곱한 것들을 모두 더해주면 10 진법으로 표현된 수를 계산할 수 있다.
아래 코드에서는 팩토리얼을 간단하게 처리하기 위해 math 를 import 해서 팩토리얼을 계산하였다.
코드
import sys
import math
while True:
num = sys.stdin.readline().rstrip()
if num == '0':
break
ans = sum(int(digit) * math.factorial(idx+1) for idx, digit in enumerate(reversed(num)))
print(ans)
'Online Judge > Baekjoon' 카테고리의 다른 글
[Baekjoon 9493] 길면 기차, 기차는 빨라, 빠른 것은 비행기 | Python (0) | 2024.08.30 |
---|---|
[Baekjoon 5698] Tautogram | Python (0) | 2024.08.30 |
[Baekjoon 28432] 끝말잇기 | Python (0) | 2024.08.29 |
[Baekjoon 1004] 어린 왕자 | Python (0) | 2024.08.29 |
[Baekjoon 27065] 2022년이 아름다웠던 이유 | Python (0) | 2024.08.27 |