알고리즘/백준
BOJ | 2407 - 조합 (python)
유하 yuha
2022. 1. 1. 22:17
🧮 조합
✏️ 문제
nCm을 출력한다.
입력
n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)
출력
nCm을 출력한다.
💡 해결방법
nCm = n*(n-1)*(n-2)*・・・*1 / m*(m-1)*(m-2)*・・・*1 임을 이용해 구할 수 있다.
처음에 n/m * (n-1)/(m-1) ~ 이렇게 곱해나가는 방식으로 구하려고 했지만 큰 수로 간다면 오차가 있을 수 있다.
그러기 때문에 위의 식에서 분자 부분인 n*(n-1)*(n-2)*・・・*1 과
분모 부분인 m*(m-1)*(m-2)*・・・*1 을 따로따로 계산한 후, 마지막에 두 수를 나눠준 값을 출력했다.
👩🏻💻 소스코드
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
d = [[1, 1] for _ in range(m+1)]
result = 0
for i in range(1, m+1):
d[i][0] = d[i-1][0] * (n-i+1)
d[i][1] = d[i-1][1] * i
result = (d[m][0]//d[m][1])
print(result)