https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
꼬이지 않게 다리를 배치하기 위해서 조합을 사용하는 되는 문제였다.
from itertools import combinations
n,m = map(int,input().split())
n,m = min(n,m),max(n,m)
s=list(combinations([i for i in range(m)], n))
print(len(s))
위와 같은 방법으로 조합을 만들어서 계산하게 되면 시간초과가 발생함으로
조합계산법으로 구현했다. (조합 계산에 필요한 팩토리얼은 fac DP를 만들어 저장해뒀다.)
fac=[1]*31#팩토리얼을 담아두는 DP
for i in range(1,31):
fac[i]=fac[i-1]*i
for _ in range(int(input())):
n,m = map(int,input().split())
n,m = min(n,m),max(n,m)
print(int(fac[m]/(fac[m-n]*fac[n])))#조합 연산
'백준 파이썬 코딩' 카테고리의 다른 글
백준 14620 꽃길 파이썬 (1) | 2022.10.01 |
---|---|
백준 16235 나무 재테크 파이썬 (1) | 2022.09.24 |
백준 1780 종이의 개수 파이썬 (1) | 2022.09.21 |
백준 17822 원판 돌리기 파이썬 (0) | 2022.09.17 |
백준 14246 K보다 큰 구간 파이썬 반례 1개 O (2) | 2022.09.11 |