알고리즘 공부/플레이데이터 알고리즘 스터디
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)