개발/python
[백준 1010번] 다리 놓기 - python
dotudy
2025. 8. 21. 23:37
https://www.acmicpc.net/problem/1010
📌 문제 탐색하기
목표
- 다리를 지을 수 있는 경우의 수를 구해보자.
- 다리는 반드시 N개를 지어야 하고 교차되지 않아야한다.
- 한 사이트에는 최대 한 개의 다리만 연결이 가능하다.
입력값
- 서쪽 사이트: N
- 동쪽 사이트: M (N ≤ M)
- ex)
- 3 2 2 1 5 13 29
출력값
- 다리를 지을 수 있는 경우의 수를 출력한다.
- ex)
- 1 5 67863915
📌 코드 설계하기
해결 아이디어
- 교차되지 않게 다리를 짓는 방법의 수 → 조합 문제
- 결국, M개의 동쪽 사이트 중에서 N개를 선택하는 경우의 수와 동일하다.
- 따라서 mCn = m! / (n! · (m-n)!)
📌 정답 코드
import sys
def fac(n):
result = 1
for i in range(1, n+1):
result *= i
return result
t = int(sys.stdin.readline())
for i in range(t):
n, m = map(int, input().split())
result = fac(m) // (fac(n) * fac(m-n))
print(result)
최종 시간 복잡도: O(min(N, M-N))