백준 1676 문제 풀이 python

🐒 팩토리얼 0의 개수

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

  • 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)

  • 첫째 줄에 구한 0의 개수를 출력한다.

입력 예시

10

출력 예시

2

나의 풀이

n = int(input())

# n팩토리얼 구하기
output = 1
for i in range(1,n+1):
    output *= i

# n! 문자열로 변환시키고 뒤집어서 앞부터 '0' 갯수세기
output = str(output)
result = 0
for i in output[::-1]: #문자열 output 뒤집어서 하나씩 검사
    if i == '0':
        result += 1
    else:
        break
print(result)

쉽게 풀 수 있는 문제인데 계속 result가 0이 출력되었다.

for i in output[::-1]:
    if i == 0: #<---
        result += 1
    else:
        break

알고보니 output을 문자열로 만들었으니 숫자 0이 아닌 문자 '0'으로 갯수를 셋어야하는데

계속 숫자 0으로 갯수를 세서 총 개수가 0이 출력되었다.

그것도 모르고 삽질을.. ㅋㅋ


이후에 다른 팩토리얼 문제 풀다가 돌아왔다.
https://hwiyong.tistory.com/360 이분의 블로그를 참조했는데

N = int(input())
print(N//5 + N//25 + N//125)

위 문제를 단 두줄의 코드로 풀 수 있었다.

0이 생기는 이유는 10이 곱해졌기 때문이다.

math.factorial(10) == 1*2*3*4*5*6*7*8*9*10 == 3628800

따라서 2*5가 몇번 되었는지 찾으면 된다.
위 블로그에서는 *5가 몇개있는지만 셌다.

좋은 웹페이지 즐겨찾기