백준 | 다리 놓기

jeonghens·2024년 8월 5일

알고리즘: BOJ

목록 보기
71/125

백준 다리 놓기 문제 풀이이다.


강을 기준으로 서쪽에 n개의 사이트, 동쪽에 m개의 사이트가 있다. (n <= m)

이때 서쪽-동쪽 사이트를 연결하는 다리가 서로 겹쳐지지 않게, n개의 다리를 짓는 방법의 수를 구해야 한다.


다리가 겹치면 안 되고, 동쪽의 사이트 수가 서쪽과 같거나 크다.

따라서 동쪽 m개 사이트 중 n개를 고른 뒤, 서쪽 n개의 사이트를 순서대로 연결해야 한다.


그러므로 결국 m개 중 n개를 선택하는 조합의 수를 구하는 문제가 된다.

참고로 n개의 원소 중 r개를 선택하는 조합의 수는 다음과 같다.


코드(정답)는 다음과 같다.

import sys


def facto(n):
    if n <= 1:
        return 1
    else:
        return n * facto(n - 1)

def combination(n, r):
    return int(facto(n) / (facto(r) * facto(n - r)))

t = int(sys.stdin.readline())
for _ in range(t):
    n, m = map(int, sys.stdin.readline().split())
    print(combination(m, n))
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글