문제 : www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
풀이
m개의 사이트 중 순서없이 n개를 뽑는 경우의 수를 계산하면 된다.
예를 들어 m=5, n=2 라고 가정하면 5*4 / 2*1 이다.
이는 5*4 = 5*4*3*2*1 / 3*2*1 이므로 5*4*3*2*1 / ((3*2*1) * (2*1)) 로 표현이 가능하다.
dp에 해당 인덱스까지의 모든 숫자의 곱을 저장해둔다.
그 뒤 dp[m]을 dp[m-n]*dp[n]의 값으로 나눠 출력한다.
t = int(input())
dp = [0, 1]
for _ in range(t):
n, m = map(int, input().split(" "))
if m-n == 0:
print("1")
continue
if len(dp)-1 < m:
for i in range(len(dp), m+1):
dp.append(dp[i-1]*i)
print(dp[m]//(dp[m-n] * dp[n]))
'알고리즘 풀이 > 백준' 카테고리의 다른 글
백준 14501번 : 퇴사 (Python) (0) | 2021.02.08 |
---|---|
백준 11712번 : 2×n 타일링 2 (Python) (0) | 2021.02.07 |
백준 9461번 : 파도반 수열 (Python) (0) | 2021.02.06 |
백준 1932번 : 정수 삼각형 (Python) (0) | 2021.02.04 |
백준 2156번 : 포도주 시식 (Python) (0) | 2021.02.04 |