전 포스팅에서 풀었던 이항 계수 1 문제와 비슷하나, 다른 방식으로 풀어야 했다:
import sys
a, b = map(int, sys.stdin.readline().split())
N = 1
K = 1
for i in range(b):
N *= a-i
K *= b-i
print(int(N/K)%10007)
처음에는 이렇게 풀었더니 틀린 답이 나왔다. 이유는 곰곰히 생각해보니, 문제에서 주어졌듯이 N
, K
값이 매우 커질 수 있는데, 그렇게 된다면 한번에 K로 나눌 때 정확하지 않은 값이 나올 수 있을 수 있다고 생각했기 때문이다. 따라서, 천천히 한 숫자씩 나누어주면 될 듯 했다:
정답으로 제출한 풀이
import sys
a, b = map(int, sys.stdin.readline().split())
N = 1
K = 1
for i in range(b):
N *= a-i
for i in range(b):
N = N//(b-i)
print(N%10007)
이렇게 하나씩 나누어주는 방식으로 진행을 하고 마지막에 10007의 나머지 값을 구하는 방식으로 진행했다.
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이: 1920번> 파이썬 - 수 찾기 (0) | 2021.01.05 |
---|---|
<백준 문제풀이: 1676번> 파이썬 - 팩토리얼 0의 개수 (0) | 2020.12.27 |
<백준 문제풀이: 11050번> 파이썬 - 이항 계수 1 (0) | 2020.12.27 |
<백준 문제풀이: 3036번> 파이썬 - 링 (0) | 2020.12.27 |
<백준 문제풀이: 10773번> 파이썬 - 제로 (0) | 2020.12.27 |