N개의 수 중 K개를 선택하는 경우의 수를 구하는 방법은 점화식을 구하는 것에서 부터 시작합니다.
5개중 3개를 선택하는 경우의 수 점화식의 경우
D[5][3] = D[4][2] + D[4][3]
5개중 3개를 선택하는 경우의 수는
[4개의 수 중 2개를 선택한 경우의 수 + 4개의 수 중 3개를 선택한 경우의 수] 입니다. = 10
4개의 수 중 2개를 선택하는 경우의 수는
[3개의 수 중 1개를 선택한 경우의 수 + 3개의 수 중 2개를 선택한 경우의 수] = 6
4개의 수 중 3개를 선택하는 경우의 수는
[3개의 수 중 2개를 선택한 경우의 수 + 3개의 수 중 3개를 선택한 경우의 수] = 4
3개의 수 중 3개를 선택하는 경우의 수는
[2개의 수 중 2개를 선택한 경우의 수 + 2개의 수 중 3개를 선택한 경우의 수] = 1
3개의 수 중 2개를 선택하는 경우의 수는
[2개의 수 중 1개를 선택한 경우의 수 + 2개의 수 중 2개를 선택한 경우의 수] = 3
3개의 수 중 1개를 선택하는 경우의 수는
[2개의 수 중 0개를 선택한 경우의 수 + 2개의 수 중 1개를 선택한 경우의 수] = 3
위 점화식을 이용하여 문제를 풀제를 풀기 위해서는 우선적으로 배열을 정비해줍니다.
5개의 수 중 3개를 선택하는 경우 0 ~ 5를 담는 2차원 배열을 만들어줍니다
int array[6][6] = {
{1, 0, 0, 0, 0, 0}, // 0개의 수 중 0개를 선택할 경우의 수
{1, 1, 0, 0, 0, 0}, // 1개의 수 중 0개, 1개를 선택할 경우의 수
{1, 2, 1, 0, 0, 0}, // 2개의 수 중 0개, 1개, 2개를 선택할 경우의 수
{1, 3, 0, 1, 0, 0}, // 3개의 수 중 0개, 1개, 3개를 선택할 경우의 수
{1, 4, 0, 0, 1, 0}, // 4개의 수 중 0개, 1개, 4개를 선택할 경우의 수
{1, 5, 0, 0, 0, 1} // 5개의 수 중 0개, 1개, 5개를 선택할 경우의 수
}
0개를 선택하는 수, 1개를 선택하는 수, 배열에 있는 수 만큼 선택하는 수를 배열에 입력했습니다.
남은 경우의 수를 점화식을 이용해 채워주겠습니다.
int array[3][2] = array[2][1] + array[2][2]; // 3
int array[4][2] = array[3][1] + array[3][2]; // 6
int array[4][3] = array[3][2] + array[3][3]; // 4
int array[5][2] = array[4][1] + array[4][2]; // 10
int array[5][3] = array[4][2] + array[4][3]; // 10
int array[5][4] = array[4][3] + array[4][4]; // 5
반복문을 이용한다면 이렇게 할 수 있을 것 같습니다
for (int i = 2; i <= N; i++) {
for (int j = 1; j < i; j++) {
array[i][j] = array[i-1][j-1] + array[i-1][j];
}
}
응용 문제
11050, 11051 이항계수 구하기 (조합론) [Bronze I, Silver II]
백준 11050번: 이항 계수 1 (acmicpc.net)백준 11051번: 이항 계수 2 (acmicpc.net) 이항계수 구하기N개의 수 중 K개를 선택하는 경우의 수를 구하는 방법은 점화식을 구하는 것에서 부터 시작합니다. 5개중
flrjtwjrjt.tistory.com
1010 다리 놓기 (조합론) [Silver V]
1010번: 다리 놓기 (acmicpc.net) 서쪽, 동쪽에 각각 N개, M개의 사이트가 주어지고 (N M개의 사이트중 N개를 선택하라는 것이고 모든 경우의 수를 구하라는 것은 이항계수 구하는 공식을 이용하라는
flrjtwjrjt.tistory.com
'프로그래밍 > 자료구조와 알고리즘' 카테고리의 다른 글
동적 계획법 (0) | 2024.05.02 |
---|---|
세그먼트 트리 (2) | 2024.04.22 |
트리 순회 (0) | 2024.04.21 |
트라이 (Trie) (0) | 2024.04.20 |
유클리드 호제법 (0) | 2024.03.28 |