문제
풀이
이항 계수라는 개념을 모르면 풀기가 어려운 문제였다.
비슷한 문제인 이항 계수 1 같은 경우 N이 최대 10으로 작기 때문에 재귀적으로 코드를 작성하거나 itertools모듈을 이용해도 풀이가 가능했다.
하지만, 이 문제는 N이 최대 1000으로 O(N^2)시간의 알고리즘을 구성해야 한다. 따라서 바텀업(Bottom-up) 방식으로 이항 계수를 구현했다. MOD계산을 해주는 것도 잊으면 안된다.
코드
import sys
n, k = map(int, sys.stdin.readline().split())
dp = [[1 for _ in range(k+1)] for _ in range(n+1)]
for i in range(1, k+1):
for j in range(i+1, n+1):
dp[j][i] = (dp[j-1][i-1] + dp[j-1][i]) % 10007
print(dp[n][k])
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 16637 - 괄호 추가하기 [Python(파이썬)] (0) | 2021.02.13 |
---|---|
[백준] 17070 - 파이프 옮기기 1 [Python(파이썬)] (0) | 2021.02.08 |
[백준] 7569 - 토마토 [Python(파이썬)] (0) | 2021.02.03 |
[백준] 1890 - 점프 [Python(파이썬)] (0) | 2021.02.03 |
[백준] 9095 - 1, 2, 3 더하기 [Python(파이썬)] (0) | 2021.02.01 |