컴퓨터공학 💻 도서관📚
백준 1010번 다리 놓기 본문
파이썬 버전
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