▶문제 출처 : https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
# 다이나믹 프로그래밍, 순열 활용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
/*
조합을 이용해야 한다.
nCr = n! / {(n-r)! * r!}
케이스 [1 3] → 3C1 = 3! / (2! * 1!)
for문을 3번 돌리는 것은 너무 비효율적이므로
nCr = n*(n-1)*...*(n-r+1) / r*...1
으로 바꾸어서 풀었다.
*/
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 개수 입력
for(int i=1; i<=T; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
System.out.printf("%.0f\n", Combination(M, N));
}
}
public static double Combination(int n, int r) {
double a = 1;
double b = 1;
for (double i = n; i > n - r; i--) {
a = a * i;
}
for (double i = r; i > 0; i--) {
b = b * i;
}
return a / b;
}
}
'▶ 코테 준비 > 백준 문제풀이' 카테고리의 다른 글
[백준 1032번 자바] 명령 프롬프트 (0) | 2022.06.24 |
---|---|
[백준 2839번 자바] 설탕 배달 (0) | 2022.06.23 |
[백준 1546번 자바] 평균 (0) | 2022.06.22 |
[백준 4949번 자바] 균형잡힌 세상 (0) | 2022.06.20 |
[백준 11728번 자바] 배열 합치기 (0) | 2022.06.15 |