๋ฌธ์ ๋งํฌ: www.acmicpc.net/problem/1010
๋ฌธ์ ์ค๋ช
์ฌ์ดํธ์ ๊ฐ์๋ ํญ์ ๋์ชฝ์ด ๋ง์ผ๋ฏ๋ก (N <= M) ๋ค๋ฆฌ๋ฅผ ์ง์ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ ๋์ชฝ์ ์ฌ์ดํธ๋ฅผ N๊ฐ ๊ณ ๋ฅด๋ ๊ฒฝ์ฐ์ ์์ ๊ฐ๋ค. ์ฆ M๊ฐ ์ค N๊ฐ๋ฅผ ๋ฝ๋ ์กฐํฉ์ ๊ตฌํ๋ฉด ๋๋ค. ์ด๋ ์ดํญ ๊ณ์(์กฐํฉ์ ์) ๊ฐ๋ ์ ์ด์ฉํ๋ค.
์ด๋ ์ดํญ๊ณ์๋ ๋ค์๊ณผ ๊ฐ์ ์ฑ์ง์ด ์๋ค.
n๊ฐ์ ์์ ์ค์์ k๊ฐ์ ์์๋ฅผ ๋ฝ๋ ๊ฒฝ์ฐ์ ์๋ ๋ค์ ๋ ๊ฐ์ง๋ฅผ ํฉํ ๊ฒ์ด๋ค.
- (n - 1)๊ฐ ์์ ์ค์์ k๊ฐ์ ์์๋ฅผ ๋ฝ๊ณ n๋ฒ์งธ ์์๋ฅผ ๋ฒ๋ฆฌ๊ธฐ
- (n - 1)๊ฐ ์์ ์ค์์ (k - 1)๊ฐ์ ์์๋ฅผ ๋ฝ๊ณ n๋ฒ์งธ ์์๋ ํฌํจํ๊ธฐ
์ด๊ฒ์ ์์ผ๋ก ์ ๋ฆฌํ ๊ฒ์ด ์์ ์์์ด๋ค. ์ด๋ ๋์ ๊ณํ๋ฒ(Dynamic Programming)์ผ๋ก ๊ตฌํํ ์ ์๋ค.
- ์ดํญ ๊ณ์๋ฅผ ์ ์ฅํ nxk ํฌ๊ธฐ์ 2์ฐจ์ ๋ฆฌ์คํธ(bc) ์์ฑ(๋๋ nxn ๋ฆฌ์คํธ์์ nxk๋ง ์ฌ์ฉ)
- ๋ง์ฝ bc[i][j]์์ j๊ฐ 0์ด๊ฑฐ๋ i์ผ ๊ฒฝ์ฐ ์ดํญ ๊ณ์์ 1 ์ ์ฅ
- ์๋ ๊ฒฝ์ฐ bc[i][j] = bc[i - 1][j - 1] + bc[i- 1][j]๋ฅผ ์ดํญ ๊ณ์ ๋ฆฌ์คํธ์ ์ ์ฅ
- i = n, j = min(i, k)๊น์ง 2~3๋ฒ ๋ฐ๋ณต ์ํ
์์ค์ฝ๋
T = int(input())
while T:
n, m = map(int, input().split())
# Binomial Coefficient๋ฅผ ์ ์ฅํ (m + 1)x(m + 1) ๋ฆฌ์คํธ ์์ฑ
bc = [[0]*(m + 1) for i in range(m + 1)]
for i in range(m + 1):
for j in range(min(i, n) + 1):
if j == 0 or j == i:
bc[i][j] = 1
else:
bc[i][j] = bc[i-1][j-1] + bc[i-1][j]
print(bc[m][n])
T -= 1
728x90
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค(BOJ) / Python] 1463๋ฒ: 1๋ก ๋ง๋ค๊ธฐ (0) | 2021.03.30 |
---|---|
[๋ฐฑ์ค (BOJ) / Python] 18352๋ฒ: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2021.03.30 |
[๋ฐฑ์ค(BOJ) / Python] 10026๋ฒ: ์ ๋ก์์ฝ (0) | 2021.03.16 |
[๋ฐฑ์ค(BOJ) / Python] 1260๋ฒ: DFS์ BFS (0) | 2021.03.15 |
[๋ฐฑ์ค(BOJ) / Python] 1946๋ฒ: ์ ์ ์ฌ์ (0) | 2021.03.09 |