Algorithm/백준

[BAEKJOON] 1676번: 팩토리얼 0의 개수

NegotiationMan 2023. 8. 23. 19:14

문제

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

 

코드

import sys, math

input = sys.stdin.readline

n = str(math.factorial(int(input())))[::-1] # 팩토리얼 계산 후 뒤집어주기
cnt = 0
for digit in n:
    if digit == '0':
        cnt += 1
    else:
        break

print(cnt)

나는 팩토리얼 값을 문자열로 만들어서 뒤집은 다음 '0'을 찾아줬다.

 

나의 생각

다른 풀이 방법을 찾아보았다.

1. 팩토리얼 값을 구한 다음에 n을 10으로 계속 나눠 주는 것

import sys,math
input = sys.stdin.readline

n = math.factorial(int(input()))
cnt = 0
while n % 10 == 0:
    cnt += 1
    n //= 10

print(cnt)

 

2. 5로 나눠지는 몫을 더해주기

n = int(input())
cnt = 0

while n > 5:
    cnt += n//5
    n //= 5

print(cnt)

5! 은 5 x 4 x 3 x 2 x 1 = 120인데, 5개 1개라서 0이 1개 있다.

그렇다면? 10! 은 어떨까

10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 3628800인데, 10은 2 x 5 이므로, 5가 총 2개라서 0이 2개 있다.

즉, 5로 나눠지는 몫을 더해주면 뒷자리가 0이 나오는 개수를 알 수 있다.