![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foginy%2FbtsHdfA2jdo%2F51uy9eorYqaAIatgxlHIsk%2Fimg.png)
[백준 1676] 팩토리얼 0의 개수 (Python) 풀이
진공이
·2024. 5. 6. 20:10
반응형
https://www.acmicpc.net/ [출처]
1. 문제
N! 에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
2. 입력
N이 주어진다. (0 ≤ N ≤ 500)
3. 출력
0의 개수를 출력한다.
4. 풀이
N이 최대 500까지 존재하므로, 너무 큰 수인 500! 자체를 가지고 풀 수는 없다.
뒷자리 수에 0이 존재하려면, 약수에 10이 존재해야 한다.
0의 개수를 세자면 10^1 -> 1개, 10^2 -> 2개, ... 10^10 -> 10개라는 규칙이 있다.
N에 10이 몇 번 곱해졌는지 알기 위해서 소인수 분해를 생각했다.
10 = 2 * 5이므로 N을 소인수 분해 했을 때, 2와 5의 개수를 세면 되었다.
통상적으로 1 ~ N까지 곱한다고 했을 때, 소인수에 2가 5보다 많거나 같기 때문에 5의 개수만 세기로 했다.
(25 같은 경우는 5가 2번 곱해졌으므로, 5로 나누는 작업을 여러 번 해 줄 필요가 있다.)
5. 소스 코드
n = int(input())
fives = 0
for i in range(1,n+1):
if i%5==0:
k = i
while k%5==0:
fives +=1
k/=5
print(fives)
반응형
'Coding > Algorithm' 카테고리의 다른 글
[백준 2389] 설탕 배달 (Python) 풀이 (0) | 2024.07.27 |
---|---|
[백준 11718] 그대로 출력하기 (Python) 풀이 (0) | 2024.04.21 |
[백준 2562] 최댓값 (Python) 풀이 (1) | 2024.04.06 |
[백준 10818] 최소, 최대 (Python) 풀이 (1) | 2024.04.04 |
[백준 25304] 영수증 (Python) 풀이 (0) | 2024.04.04 |