๋ฐฑ์ค 11051๋ฒ
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
dp = [[1] for i in range(n+1)] #์ฒ์์๋ ๋ฌด์กฐ๊ฑด 1๋ก ์์ํ๊ธฐ์ 1์ ๋ฃ์ด์ค
dp[1].append(1) # ํ์ฌ dp == [[1], [1,1]]
for i in range(2, n+1):
for j in range(1, i+1):
if j == i:
dp[i].append(1) # ๋ง์ง๋ง์ด ๋ฌด์กฐ๊ฑด 1๋ก ๋๋๊ธฐ์ 1์ ๋ฃ์ด์ค
else:
dp[i].append(dp[i-1][j-1] + dp[i-1][j])
# ์ด์ ํ(i-1)์ ์ด์ ์ด(j-1)๊ณผ ์ด์ ํ์(i-1) ํ์ฌ ์ด(j)์ ๊ฐ์ด ๋ํ ๊ฐ์ด
## print(dp[n][k] % 10007)
๋ ์ ๋ ฅ๋๋ N, K์ ์ดํญ ๊ณ์๋ฅผ 10007๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฌธ์ ์ ๋๋ค.
์ฒ์์๋ ์ฌ๊ท๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค ํ์ผ๋, ๋ฌธ์ ์์ ์ ๊ณต๋๋ N๊ณผ K์ ๋ฒ์๊ฐ 1000๊น์ง ์ ๊ณต๋๊ธฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ์ฌ ํ์ด๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๊ฒ ๋์๊ณ DP(๋์ ๊ณํ๋ฒ)์๊ณ ๋ฆฌ์ฆ์
ํ์ค์นผ์ ์ผ๊ฐํ ๊ณต์์ ์ ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.
DP๋ ์์ ๋ฌธ์ ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ํ์ ๊ฐ๋ ์ผ๋ก ๋๋์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์์ ๋ฌธ์ ์์๋ ํ์ ๋ฌธ์ (์์์ ์๋๋ก 1~n+1๊น์ง์ ์ค์ด ์์ ๋ n-1์ค์ k-1, k์ ์์น) ์ ์๋ ๋ ๊ฐ์ ์๋ฅผ ๋ํจ์ผ๋ก์ ์์๋ฅผ ๋ฌธ์ (n์ค์ k์ ๊ฐ) ์ ํด๊ฒฐ ํ ์ ์๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.
์ฒ์๊ณผ ๋์ 1์ด๊ณ ๋๋จธ์ง๋ (n-1, k-1) + (n-1, k) = (n, k)์ด๋ผ๋
์ด์ ์ ๊ฐ์ ์ฐธ์กฐํ์ฌ ํ์ฌ์ ๊ฐ์ ์์๋ด์ผ ํ๊ธฐ์ DP๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค.