안녕하세요. 이번에는 백준 11050 이항 계수 1 문제를 풀어보려고 합니다.
https://www.acmicpc.net/problem/11050
Problem
Solution
import java.io.*;
import java.util.*;
public class Main {
static int[][] dp;
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());
dp = new int[N + 1][K + 1];
System.out.println(BC(N, K));
}
static int BC(int n, int k) {
if(dp[n][k] > 0) {
return dp[n][k];
}
if(k == 0 || n == k) {
return dp[n][k] = 1;
}
return dp[n][k] = BC(n - 1, k - 1) + BC(n - 1, k);
}
}
이번 문제는 이항 계수를 구하는 문제이다. 이항 계수를 잘 몰라서 위키 백과를 먼저 참고하여 문제를 풀 수 있었다.
이항 계수란,
이렇게 이항 계수를 풀려고 보면 파스칼의 삼각형을 보고 접근 법을 배울 수 있다. 왼쪽의 파스칼의 삼각형을 보고 점화식을 세우면 맨 앞과 맨 뒤는 1이 들어가는 것 과 가운데 숫자는 중간 값들의 합으로 나타나는 것을 확인할 수 있다
조건 1. 양쪽 끝은 1이 들어간다.
if(k == 0 || n == k) {
return dp[n][k] = 1;
}
조건 2. 가운데 숫자는 중간 값들의 합이다.
dp[n][k] = BC(n - 1, k - 1) + BC(n - 1, k);
이렇게 2가지의 조건들을 구하면서 이항 계수를 풀어 나가면 된다.
Performance
Reference
https://ko.wikipedia.org/wiki/%EC%9D%B4%ED%95%AD_%EA%B3%84%EC%88%98
반응형
'백준 Algorithm > 백준 CLASS2' 카테고리의 다른 글
[백준] CLASS2 11866 요세푸스 문제 0 - JAVA [자바] (0) | 2023.10.16 |
---|---|
[백준] CLASS2 11650 좌표 정렬하기 - JAVA [자바] (2) | 2023.10.15 |
[백준] CLASS2 10866 덱 - JAVA [자바] (0) | 2023.10.13 |
[백준] CLASS2 10845 큐 - JAVA [자바] (0) | 2023.10.12 |
[백준] CLASS2 10828 스택 - JAVA [자바] (0) | 2023.10.11 |