백준/문제풀이_python

1010 다리놓기 _python

휴대용치즈 2022. 11. 3. 02:54

https://www.acmicpc.net/problem/1010

 

1010번: 다리 놓기

입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.

www.acmicpc.net

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제 접근

dp문제.

문제를 읽어보면 M개중 N개를 뽑아라 라는 말로 간추릴수 있다.

조합 공식에 대입만 해주면 되는데, 팩토리얼을 사용하고 범위는 30까지니 dp로 미리 값을 저장해두면 된다.

 

조합 공식이 기억안난다면

https://coding-factory.tistory.com/606

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

코드

from collections import deque
import sys
input = sys.stdin.readline

"""
1010
M개중 N개를 골라라 - 조합. mCn = m!/((m-n)!*n!)
"""

#입력
T = int(input())
dp = [i for i in range(31)]
dp[0]=1

#팩토리얼
def factorial():
    for i in range(3,31):
        dp[i] *= dp[i-1]
factorial()

#연산후 출력
for i in range(T):
    N,M = map(int,input().split())
    print(dp[M]//(dp[M-N]*dp[N]))