출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

간단한 문제였으나, 시간 초과가 몇번 떠서 다시 풀어봐야 했던 문제이다.

import sys

N = int(sys.stdin.readline())

factorial = [x for x in range(1, N+1)]

two_count = 0
five_count = 0

for i in factorial:
    while i%5 == 0:
        five_count += 1
        i == i//5

print(five_count)

처음에는 간단히 5의 개수가 이 팩토리얼 안에 몇개 들어있는지 찾으면 될 것이라 생각했다. (왜냐면 5보다 2가 더 많기 때문에 5의 개수만 세주면 간단히 0의 개수가 나오기 때문이다.) 하지만 이렇게 하니 시간초과가 떠서, 다른 방식으로 해봐야했다:


정답으로 제출한 풀이

import sys

N = int(sys.stdin.readline())
num = 1

for i in range(1, N+1):
    num *= i

count = 0
for j in reversed(list(str(num))):
    if j == '0':
        count += 1
    else:
        break

print(count)

다르게 생각해낸 방법은 그냥 팩토리얼 연산을 해주고, 숫자를 뒤집어, 뒤에서부터 0의 개수를 세주고, 만약 0이 아닌 숫자가 나오기 시작하면, 이 실행을 멈추고, count를 출력해주는 것이다.