https://www.acmicpc.net/problem/11051
11051번: 이항 계수 2
첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
- 조합의 출력을 10,007로 나누어야 하는 문제이다.
- 계산과정에서 나온 값들은 dpArray 혹은 dpDictionrary에 저장하는 식으로 진행하면된다.
- 값들은 모두 10007 나머지 값들을 사용하면 간단히 구할 수 있다.
더보기
# 25, 12 -> 5200300
N, M = map(int, str(input()).split())
dpDict = dict();
dpDict[0] = 1
dpDict[1] = 1
# r!
rFact = 1
if M % 10007 in dpDict.keys(): rFact = dpDict.get(M % 10007)
else :
for r in range(1, (M%10007)+1): rFact *= r
dpDict[M % 10007] = rFact
# n-r!
nrFact = 1
if (N-M) % 10007 in dpDict.keys(): nrFact = dpDict.get((N-M) % 10007)
else:
for nr in range(1, (N-M) % 10007 + 1): nrFact *= nr
dpDict[(N-M) % 10007] = nrFact
# n!
nFact = 1
if N % 10007 in dpDict.keys(): nFact = dpDict.get(N % 10007)
else:
for n in range(1, N % 10007 +1): nFact *= n
dpDict[n%10007] = nFact
print(int(nFact // (rFact*nrFact)) % 10007)
'Coding Problem > 백준' 카테고리의 다른 글
[백준] 1992 - 쿼드트리 (0) | 2021.06.21 |
---|---|
[백준] 2630 - 색종이 만들기 (0) | 2021.06.21 |
[백준] 2004 - 조합 0의 개수 (0) | 2021.06.01 |
[백준] 9375 - 패션왕 신해빈 (0) | 2021.05.31 |
[백준] 5086 - 배수와 약수 (0) | 2021.05.31 |