코딩테스트

[백준] 1010 | 다리 놓기 [파이썬/python]

사용할수없는닉네임이왜이렇게많지ㅠㅠ 2025. 3. 16. 21:12
728x90

문제

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

서쪽의 사이트(N개)와 동쪽의 사이트(M개)를 연결하는 다리를 다리끼리 교차하지 않는 선에서 최대한 많이 지으려고 할 때, 그 경우의 수를 구하는 것인데(여기에서 N≤M 이다), 사실상 mCn을 구하는 것과 같다. 다리끼리는 겹쳐질 수 없기 때문에, 동쪽의 사이트 M개 중 다리를 지을 사이트 N개를 고르기만 하면 골라진 사이트가 서쪽의 어떤 사이트와 연결될지는 자동으로 정해진다.

 

접근

조합을 계산하는 공식대로 코드를 작성했다. 분자끼리 곱하고 분모끼리 곱한 후 분자에서 분모를 나눈 값을 출력하도록 했다.

 

코드

import sys
input = sys.stdin.readline

T = int(input())

for i in range(T):
    N, M = map(int, input().split())
    n, d = 1, 1
    for j in range(M, M-N, -1):
        n *= j
    for k in range(N, 0, -1):
        d *= k
    print(n // d)

직관적인 변수명을 사용할 필요성을 느껴서 분자(numerator), 분모(denominator)에서 첫 글자를 따왔는데 전혀 직관적이지 않은 것 같다……. 간결함을 유지하면서도 좋은 변수명을 지을 수 있도록 조금 더 생각해봐야겠다.

728x90