백준

[BOJ/python] 1676번 팩토리얼 0의 개수

LUNAV 2022. 10. 5. 00:01

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

문제 해석
N!의 맨 뒷자리 0의 개수를 구한다.


코드

import sys
from collections import deque

input = sys.stdin.readline

def factorial(n):
    factolist = deque([1, 1])
    if n == 0 or n == 1:
        return 0
    else:
        for i in range(2, n+1):
            factolist.append(factolist[-1] * i)
            factolist.popleft()
        factorialZero = str(factolist[-1])

        count = 0
        while True:
            if int(factorialZero[-1]) != 0:
                break
            else:
                count += 1
                factorialZero = factorialZero[:-1]
        return count

n = int(input())
print(factorial(n))

문제 풀이
말 그대로 N!의 맨 뒷자리 0의 개수를 구한다.

가령 5! = 120, 맨 뒷자리 0의 개수는 1개이다.

또 다른 예를 들자면 10! = 3,628,800이며, 맨 뒷자리 0의 개수는 2개이다.

 

이렇게 구한 팩토리얼의 값을 문자열로 바꿔, 0의 개수를 세주면 된다.