본문 바로가기

Algorithm

[파이썬] 백준 1676번: 팩토리얼 0의 개수

 

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

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net

 

방법1: math.factorial을 통해 n 팩토리얼을 계산한 뒤, str로 바꿔주고 뒤집어줍니다.

이후 0이 끝날 때까지 개수를 세주고, 끝나면 break을 해줍니다.

from math import factorial
n = int(input())
cnt = 0
for x in str(factorial(n))[::-1]:
    if x != '0':
        break
    cnt += 1
print(cnt)

방법2 (더 효율적):

n에서 5로 나눠 떨어지는 수가 몇개인지 구하는 방법입니다.

예를 들어 n=100인 경우, 100 // 5 -> 20개입니다.

그러나 여기서 100의 인수인 25는 5를 2개 추가로 가지고 있기 때문에, 따로 더 세줘야 합니다.

(100 // 25 -> 4개)

즉 100!의 0의 개수는 20+4 = 24개가 됩니다.

n = int(input())
def five_count(n):
    cnt = 0
    while n != 0:
        n //= 5
        cnt += n
    return cnt
    
print(five_count(n))