코딩테스트/백준
[백준] 2004번 : 조합 0의 개수 (Python)
알코딩
2024. 6. 13. 13:59
문제 : https://www.acmicpc.net/problem/2004
n과 r이 주어졌을 때,
조합 nCr의 끝자리 0의 개수를 구하는 문제다.
import sys
#input = sys.stdin.readline
N, M = map(int, input().split()) # N
# n!의 5의 개수 세기
def five_count(n):
answer = 0
while n != 0:
n = n // 5
answer += n
return answer
# n!의 2의 개수 세기
def two_count(n):
answer = 0
while n != 0:
n = n // 2
answer += n
return answer
five = five_count(N)-five_count(M)-five_count(N-M) # n!의 5의 개수
two = two_count(N)-two_count(M)-two_count(N-M) # n!의 2의 개수
print(min(two, five)) # 작은 수가 10의 개수
[문제풀이]
이 문제는 조합을 구한 후, 끝자리 0의 개수를 구하면 된다.
조합을 구하는 공식은 이렇다.

팩토리얼을 구하는 문제의 변형이다.
그러나, 정통적인 방식으로 팩토리얼을 구한 후, 10의 개수를 count하면 시간내에 문제를 풀 수 없다.
그래서 10을 이루는 2와 5의 개수를 count해서, 그 중 작은 수를 구한다!