문제

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

팩토리얼 진법으로 작성한 숫자가 주어졌을 때, 10진법으로 읽은 값을 구하는 프로그램을 작성하시오. 

 

 

import sys

#팩토리얼 함수
def factorial(n):
    if n>1:
        return n*factorial(n-1)
    else:
        return 1
        
        
#.팩토리얼 진법(상근이)
while True:
    num = sys.stdin.readline().strip()
    if int(num) == 0:
        break

    num = list(str(num))    #입력받은 숫자를 각 자리 수로 쪼개서 리스트에 담기
    num.reverse()      #for문을 돌리기 쉽게하려고 리스트를 역순으로 정렬
    l = len(num)
    cnt = [int(num[0])]  #for문의 index를 쉽게 하기 위해 일의 자리 수를 미리 담아둠
    for i in range(1, l):
        cnt.append(int(num[i])*factorial(i+1))  #각 자리숫자와 팩토리얼을 곱하고, int로 바꾸고, 어팬드
    print(sum(cnt))   #cnt 리스트 합구하기

처음에 input값 없이 프로그래머스처럼 상근이를 함수로 정의했더니 계속 틀렸다고 나왔다.

입력값들과 출력값까지 따져주어야 한다.

그래서 num = sys.stdin.readline().strip()를 사용했다. 

백준은 이 점이 참 힘들다..... 상근아 앞으로 사회부적응자처럼 이런 짓 하지 말아라..

'Algorithm' 카테고리의 다른 글

백준 10829번 #이진수변환  (0) 2021.08.21
programmers #[1차] 비밀지도  (0) 2021.08.19
백준 10872 #팩토리얼  (0) 2021.08.17
programmers #소수찾기  (0) 2021.08.10
programmers #다리를 지나는 트럭  (0) 2021.08.08

+ Recent posts