[๋ฐฑ์ค 1010๋ฒ] [๐ฅ5] ๋ค๋ฆฌ ๋๊ธฐ (python)
๋ฌธ์
์ฌ์์ด๋ ํ ๋์์ ์์ฅ์ด ๋์๋ค. ์ด ๋์์๋ ๋์๋ฅผ ๋์ชฝ๊ณผ ์์ชฝ์ผ๋ก ๋๋๋ ํฐ ์ผ์ง์ ๋ชจ์์ ๊ฐ์ด ํ๋ฅด๊ณ ์๋ค. ํ์ง๋ง ์ฌ์์ด๋ ๋ค๋ฆฌ๊ฐ ์์ด์ ์๋ฏผ๋ค์ด ๊ฐ์ ๊ฑด๋๋๋ฐ ํฐ ๋ถํธ์ ๊ฒช๊ณ ์์์ ์๊ณ ๋ค๋ฆฌ๋ฅผ ์ง๊ธฐ๋ก ๊ฒฐ์ฌํ์๋ค. ๊ฐ ์ฃผ๋ณ์์ ๋ค๋ฆฌ๋ฅผ ์ง๊ธฐ์ ์ ํฉํ ๊ณณ์ ์ฌ์ดํธ๋ผ๊ณ ํ๋ค. ์ฌ์์ด๋ ๊ฐ ์ฃผ๋ณ์ ๋ฉด๋ฐํ ์กฐ์ฌํด ๋ณธ ๊ฒฐ๊ณผ ๊ฐ์ ์์ชฝ์๋ N๊ฐ์ ์ฌ์ดํธ๊ฐ ์๊ณ ๋์ชฝ์๋ M๊ฐ์ ์ฌ์ดํธ๊ฐ ์๋ค๋ ๊ฒ์ ์์๋ค. (N โค M)
์ฌ์์ด๋ ์์ชฝ์ ์ฌ์ดํธ์ ๋์ชฝ์ ์ฌ์ดํธ๋ฅผ ๋ค๋ฆฌ๋ก ์ฐ๊ฒฐํ๋ ค๊ณ ํ๋ค. (์ด๋ ํ ์ฌ์ดํธ์๋ ์ต๋ ํ ๊ฐ์ ๋ค๋ฆฌ๋ง ์ฐ๊ฒฐ๋ ์ ์๋ค.) ์ฌ์์ด๋ ๋ค๋ฆฌ๋ฅผ ์ต๋ํ ๋ง์ด ์ง์ผ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์์ชฝ์ ์ฌ์ดํธ ๊ฐ์๋งํผ (N๊ฐ) ๋ค๋ฆฌ๋ฅผ ์ง์ผ๋ ค๊ณ ํ๋ค. ๋ค๋ฆฌ๋ผ๋ฆฌ๋ ์๋ก ๊ฒน์ณ์ง ์ ์๋ค๊ณ ํ ๋ ๋ค๋ฆฌ๋ฅผ ์ง์ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ผ.
์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ๊ฐ์ ํ ์คํธ์ผ์ด์ค์ ๋ํด ๊ฐ์ ์์ชฝ๊ณผ ๋์ชฝ์ ์๋ ์ฌ์ดํธ์ ๊ฐ์ ์ ์ N, M (0 < N โค M < 30)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ฃผ์ด์ง ์กฐ๊ฑดํ์ ๋ค๋ฆฌ๋ฅผ ์ง์ ์ ์๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
3
2 2
1 5
13 29
์์ ์ถ๋ ฅ 1
1
5
67863915
๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋งํ๋ ๋ถ๋ถ
ํ์ n, ์ด์ m์ผ๋ก ๋ํ๋ด๋ฉด dp[n][m] = dp[n][m - 1] + dp[n - 1][m - 1]๋ผ๋ ๊ท์น์ด ๋ง๋ค์ด์ง๋ค.
์ฝ๋
ver(1) - dp ์ฌ์ฉ
dp = [[1]*31 for i in range(31)]
for i in range(31):
dp[1][i] = i
for i in range(2,31):
for j in range(i+1,31):
dp[i][j] = dp[i][j-1] + dp[i-1][j-1]
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
print(dp[n][m])
ver(2) - ์กฐํฉ ์ฌ์ฉ
t = int(input())
def fa(n):
if n <= 1:
return 1
else:
return fa(n - 1) * n
for _ in range(t):
n, m = map(int,input().split())
print(fa(m) // (fa(n)*fa(m - n)))
๋๊ธ๋จ๊ธฐ๊ธฐ