알고리즘 공부/플레이데이터 알고리즘 스터디

210714 진법변환/비트연산 - 팩토리얼 진법

vs질럿 2021. 7. 14. 20:14

문제주소 : https://www.acmicpc.net/problem/5692

 

거의 두 달만에 알고리즘 문제를 풀어보는 것 같다. 이것저것 시험보느라... 결과는 1승 1패가 예상되는데 아쉽다.

 

 

문제에서 마지막 입력에 0을 준다고 하는 것을 보니 전부 입력받고 -> 처리해서 -> 출력하는게 아니라

입력받을 때마다 처리하고 출력하는 작업을 반복하고 0이 입력되면 멈추라고 하는 것 같다.

 

팩토리얼은 math모듈에 구현되어 있지만 최대 길이가 5자리라고 해서 미리 계산해서 리스트로 만들었다.

 

import sys

fac = [120, 24, 6, 2, 1]  # 길이가 최대 5자리이니 매번 계산하지 않고 미리 계산

while (True):  # 탈출 조건이 없다면 무한 반복
    input = sys.stdin.readline().strip()  # 입력

    if input[0] == '0':  # 마지막 입력인 0이 들어오면 반복문 탈출
        break

    sum = 0  # 합계를 저장할 빈 변수 생성

    for i in range(len(input)):  # 받아온 입력의 자리수만큼 반복
        sum += int(input[i]) * fac[i - len(input)]  # 현재 자리의 수 * 해당 위치의 팩토리얼 값

    print(sum)