반응형
문제 설명
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)
출력
첫째 줄에 구한 0의 개수를 출력한다.
예제 입력, 예제 출력
10 | 2 |
3 | 0 |
코드 및 설명
n = int(input())
fact = 1
cnt = 0
for i in range(1, n+1):
fact *= i
fact = str(fact)
for i in range(len(fact)-1, -1, -1):
if fact[i] == "0":
cnt += 1
else:
break
print(cnt)
이 문제는 N의 값을 N!을 구하고, 뒤에서부터 0의 개수가 0이 아닌 수를 만날때까지 세면 되는 문제이다.
수학으로 푸는 방식도 있었다.
10(2x5)의 개수를 구하는 게 이 문제의 핵심이다. 2의 배수가 5의 배수보다 많기 때문에, 5의 배수의 개수를 세면
10의 배수의 개수가 되고, 5의 제곱과 5의 세제곱의 배수는 마찬가기자 된다.
N의 범위가 500이기 때문에 5, 25, 125까지의 배수 개수로만 체크하였고 625를 넘어가면 5의 네제곱도 추가해서
구해줘야한다.
500을 예를 들면 500 // 5 = 100, 500 // 25 = 20 , 500 // 125 = 4 , 100+20+4이므로 124가 된다.
n = int(input())
answer = (n // 5) + (n // 25) + (n // 125)
print(answer)
반응형
'삽집하는 개발들 > 알고리즘' 카테고리의 다른 글
[102일차] 2×n 타일링 - 백준 - 11726(python - 다이나믹 프로그래밍) (1) | 2023.12.21 |
---|---|
[102일차] 1로 만들기 - 백준 - 1463(python - 다이나믹 프로그래밍) (22) | 2023.12.21 |
[100일차] 골드바흐의 추측 - 백준 - 6588(python - 정수론, 소수 판정, 에라토스테네스의 체) (3) | 2023.12.19 |
[99일차] 소수 구하기 - 백준 - 1929(python - 정수론, 소수 판정, 에라토스테네스의 체) (0) | 2023.12.18 |
[99일차] 소수 찾기 - 백준 - 1978(python - 정수론, 소수 판정) (2) | 2023.12.18 |