문제
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이 나오는 개수를 알 수 있다.
'Algorithm > 백준' 카테고리의 다른 글
| [BAEKJOON] 4375번: 1 (0) | 2023.08.24 |
|---|---|
| [BAEKJOON] 2004번: 조합 0의 개수 (0) | 2023.08.24 |
| [BAEKJOON] 10872번: 팩토리얼 (0) | 2023.08.23 |
| [BAEKJOON] 6588번: 골드바흐의 추측 (0) | 2023.08.23 |
| [BAEKJOON] 1929번: 소수 구하기 (0) | 2023.08.23 |