소소한 컴퓨터 이야기

팩토리얼 진법

by Cori

문제

상근이는 보통 사람들이 사는 것과는 조금 다른 삶을 사는 사람이다. 상근이는 이런 사람들의 시선이 부담스럽기 때문에, 자신만의 숫자를 개발하기로 했다. 바로 그 이름은 팩토리얼 진법이다. 팩토리얼 진법은 각 자리에 올 수 있는 숫자는 0부터 9까지로 10진법과 거의 비슷하다. 하지만, 읽는 법은 조금 다르다. 팩토리얼 진법에서는 i번 자리의 값을 ai×i!로 계산한다.

 

즉, 팩토리얼 진법에서 719는 10진법에서 53과 같다. 그 이유는 7×3! + 1×2! + 9×1! = 53이기 때문이다. 팩토리얼 진법으로 작성한 숫자가 주어졌을 때, 10진법으로 읽은 값을 구하는 프로그램을 작성하시오. 

 

· 입출력 예 

num return
719 53
1 1
15 7
110 8
102 8

풀이

1. Me

def factorial(num: int) -> int:
    if num == 1:
        return 1
    return num * factorial(num-1)

def solution(n: int) -> int:    
    sum = 0 
    for i, d in enumerate(str(n)): 
        sum += int(d) * factorial(len(str(n)) - i)
    return sum 

while True: 
    num = int(input())
    if num == 0:
        break
    print(solution(num))

입력값으로 0이 들어오면 종료된다 해서, while문의 조건절에 num이 0일 경우 조건절을 빠져나오도록 구현하였다. 입력받은 정수의 자릿수를 구하고, 해당 자릿수의 팩토리얼을 구하는 함수를 정의하여 자릿수별로 팩토리얼을 구하며 더해주는 식으로 문제를 풀었다.

'CS > Coding Test' 카테고리의 다른 글

유효한 팰린드롬  (0) 2021.09.27
진법 변환  (0) 2021.09.25
이상한 문자 만들기  (0) 2021.09.09
제일 작은 수 제거하기  (0) 2021.09.08
스킬트리  (0) 2021.09.06

블로그의 정보

코딩하는 오리

Cori

활동하기