코딩테스트
[백준] 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