알고리즘

[백준 브론즈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
반응형