Coding Test/Baekjoon
백준/11050번/Java - 이항 계수 1
grogu....
2023. 10. 7. 20:22
https://www.acmicpc.net/problem/11050
11050번: 이항 계수 1
첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))
www.acmicpc.net
5개 중 3개를 뽑는 조합의 수는 4개 중 2개를 뽑는 조합의 수와 4개중 3개를 뽑는 조합의 수의 합과 같다.
5개 중 3개를 선택할 때, 앞선 4개는 모두 선택되거나 선택되지 않았을 경우, 마지막 남은 1개 역시 선택되거나 선택되지 않는 두 가지 경우의 수 뿐이다.
마지막 남은 1개가 선택되는 경우는 앞선 4개 중 2개를 뽑은 경우이며, 선택되지 않은 경우는 앞선 4개 중 3개를 뽑은 경우이다.
따라서 i개중 j개를 뽑는 경우의 수를 arr[i][j]로 배열에서 나타낸다고 했을 때,
다음과 같은 점화식이 성립한다.
arr[i][j] = arr[i-1][j] + arr[i-1][j-1]
점화식을 통해 배열을 완성하고, 문제에서 요구하는 5C2를 구하기 위해 arr[5][2]를 출력하면 끝.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
// 배열의 의미 : arr[i][j] : i개중 j개를 뽑는 경우의 수
int[][] arr = new int[N+1][N+1];
//배열 초기화
// arr[i][1] : i개 중 1개를 선택하는 경우의 수 이므로 i 가지
// arr[i][0] : i개 중 1개도 선택하지 않는 경우의 수 이므로 1가지
// arr[i][i] : 전체를 모두 선택하는 경우의 수 1가지
for(int i=1; i<=N; i++) {
arr[i][1] = i;
arr[i][0] = 1;
arr[i][i] = 1;
}
// 조합 점화식 : arr[i][j] = arr[i-1][j] + arr[i-1][j-1]
// 점화식으로 배열 완성
for(int i=2; i<=N; i++) {
for(int j=1; j<i; j++) {
arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
}
}
// n C k 구하기
System.out.println(arr[N][K]);
br.close();
}
}