컴퓨터공학 💻 도서관📚

백준 1010번 다리 놓기 본문

💣😝알고리즘 문제(CAM)/합체

백준 1010번 다리 놓기

들판속초록풀 2025. 5. 15. 00:19

파이썬 버전

 

n  * n-1  * ...  * (n - r + 1)    과     r !    을   구해서 해결

 

입력 받을 때    map 함수 활용

 

def calcu (a, b):
    p = 1
    q = 1
    ans = 1
    for i in range(b, b-a, -1):
        p *= i
    for j in range(1, a+1, 1):
        q *= j

    ans = p // q
    return ans

N = int(input())
for i in range(N):
    n, m = map(int, input().split())
    print(calcu(n, m))

 


 

자바 버전

 

입력받을 때  Scanner 객체 활용함


int T = sc.nextInt();    // 자바에서 정수 입력 받는 방법

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt(); // 테스트 케이스 수

        while (T-- > 0) {
            int N = sc.nextInt(); // 서쪽 사이트 수
            int M = sc.nextInt(); // 동쪽 사이트 수

            System.out.println(combination(M, N)); // M C N 출력
        }
    }

    // 조합 함수: M C N = M * (M - 1) * ... * (M - N + 1) / N!
    static long combination(int m, int n) {
        long numerator = 1;      // numerator : 분수의 분자
        long denominator = 1;    // denominator : 분수의 분모

        for (int i = 0; i < n; i++) {
            numerator *= (m - i);        // 이렇게 분모, 분자 한 번에 계산할 수 도 있음
            denominator *= (i + 1);
        }

        return numerator / denominator;
    }
}

'💣😝알고리즘 문제(CAM) > 합체' 카테고리의 다른 글

백준 2840번 행운의 바퀴  (0) 2025.05.16
Comments