백준 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가 몇개있는지만 셌다.
Author And Source
이 문제에 관하여(백준 1676 문제 풀이 python), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mauserne/백준-1676-문제-풀이-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)