๐[๋ฐฑ์ค-1010] ๋ค๋ฆฌ๋๊ธฐ(Python)
[๋ฐฑ์ค-1010] ๋ค๋ฆฌ๋๊ธฐ Pythonํด๋ต๊ณผ ์๋ฌ
๋ฐฑ์ค/๋จ๊ฒ๋ณ ๋ฌธ์ /์กฐํฉ๋ก /๋ค๋ฆฌ๋๊ธฐ
๋ฌธ์ ๋ฅผ ํ์ด๋ณด์๋ค.
์ค๋ณต์ด ๋ถ๊ฐ๋ฅํ ๋ฝ๊ธฐ ๋ผ๊ณ ์๊ฐํด์ ๊ฐ์ฅ ๋จผ์ ์ดํญ๊ณ์($_nC_r$)
๋ฅผ ๋ ์ฌ๋ ธ๋ค.
์ฝ๋
์ ๋ต์ฝ๋
import sys
def m_C_n(n, m):
up = 1
down = 1
for i in range(m, m-n, -1):
up *= i
for i in range(1, n+1):
down *= i
return round(up/down)
num = int(sys.stdin.readline())
result = []
for i in range(num):
n, m = map(int, sys.stdin.readline().split())
result.append(m_C_n(n, m))
for i in range(num):
print(result[i])
์๋ฌ์ฝ๋
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
n = int(input())
m = int(input())
print(factorial(n)/(factorial(m)*factorial(n-m)))
์ ์ฝ๋๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
๊ธฐ์กด ๊ณต์์ ์ ์ฉํ๊ธฐ ์ํด์ ํฉํ ๋ฆฌ์ผ ๊ณ์ฐ๊ณผ ์ฌ๊ท ๋ฐฉ์์ ์ฌ์ฉํ๋๋ฐ ์๋์ ๊ฐ์ ์๋ฌ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ฉด์ ์คํ์ด ์ค๋จ๋์๋ค.
RecursionError: maximum recursion depth exceeded
์ ์๋ฌ ๋ฉ์์ง๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์์คํ
์์ ํ์ฉํ๋ ์ต๋ ์ฌ๊ท ๊น์ด(recursion depth)๋ฅผ ์ด๊ณผํ์ต๋๋ค.
๋ผ๋ ๋ป์ผ๋ก, ์
๋ ฅ๊ฐ์ ์ํ ์ฌ๊ท ํ์๊ฐ ๋๋ฌด ๋ง์ผ๋ฉด ์ ๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฌ๊ท ํ์ -> ๋ฐ๋ณต๋ฌธ ํ์
๊ณผ, ์ฌ๊ท ํธ์ถ์ ๋ฐํ๊ฐ์ ์ ์ฅ ํน์ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๋ฑ์ด ์๋ค.
์ดํญ๊ณ์($_nC_r$)๋?
์ดํญ๊ณ์(Binomial Coefficient)
๋ ์กฐํฉ๋ก ์์ ๋ฑ์ฅํ๋ ๊ฐ๋
์ผ๋ก ์ฃผ์ด์ง ํฌ๊ธฐ ์งํฉ์์ ์ํ๋ ๊ฐ์๋งํผ ์์์์ด ๋ฝ๋ ์กฐํฉ์ ๊ฐ์ง์๋ฅผ ์ผ์ปซ๋๋ค.
์ฝ๊ฒ ์๊ฐํ๋ฉด $_nC_r$์์ n๋ถํฐ r๊ฐ์ ์๊น์ง 1๋งํผ ๊ฐ์ํ๋ฉด์ ๊ณฑํ ๊ฐ์ด ๋ถ์, r!๊ฐ ๋ถ๋ชจ ๋ผ๊ณ ์๊ฐํ๊ณ ๊ณ์ฐํ๋ฉด ์ฝ๊ฒ ๊ณ์ฐํ ์ ์๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ