# 문제
백준 2407 조합 파이썬 풀이
# 코드
import sys
n,m = map(int,sys.stdin.readline().split())
arr = [i for i in range(1,n+1)]
# nCm
# n! / (n-r)! * r!
# DP 로 팩토리얼을 구하자
mulit = 1
cnt = 2
dp = [-1] * 101
dp[1] = 1
while True :
if cnt == n+1 :
break
dp[cnt] = dp[cnt-1]*cnt
cnt+=1
print(dp[n] // ((dp[n-m]) * dp[m]))
# math모듈을 이용해 쉽게 구할 수 있다.
import math
n, m = map(int, input().split())
print(math.comb(n, m))
# 풀이
- itertools를 사용하면 시간초과가 난다. 이건 모든 조합의 수를 구해버리기 때문에 조합의 수학 공식을 이용하자.
- 팩토리얼을 dp를 사용해서 쉽게 구할 수 있다.
- 한번 구해놓으면 combination(조합)을 구할때 썼던 것을 재사용 할 수 있다.
- 최대 크기가 100이기 때문에 수는 커지지만, 파이썬에서는 충분히 가능하기 때문에 풀이가 가능하다.
- 파이썬 math모듈에 조합을 구할 수 있다.
'•알고리즘(Algorithm ) > 문제풀이' 카테고리의 다른 글
[백준1991&파이썬] 파이썬에서 이진트리의 전위,중위,후위 간단히 수행해보자. (0) | 2023.05.06 |
---|---|
[백준16953&파이썬] BFS를 이용해 1차원 탐색하기 (0) | 2023.05.05 |
[백준5525&파이썬] 문자열을 탐색하는 방법(KMP를 시도했으나 실패..) (1) | 2023.05.03 |
[백준7662&파이썬] 이중 우선순위 큐를 만들고 관리하기(중복값 처리에 대해 항상 생각하자) (0) | 2023.05.02 |
[백준15651&파이썬] 중복순열을 구하는 두가지 방법 (1) | 2023.05.01 |