🧫 문제 분석
✔️ 출처
📖 문제

DP 연습셋 문제중 하나
0~N까지의 정수 K개를 더한 합이 N이 되는 경우의 수 구하기
0~N까지의 수(i) 를 1~K개를 뽑아서 더해 i가 되는 경우의 수를 구하는 식으로 구해봤더니 맞았다.
i \ k | 1 | 2 | 3 | 4 |
0 | 1 | 1 | 1 | 1 |
1 | 1 | 2 | 3 | 4 |
2 | 1 | 3 | 6 | 10 |
3 | 1 | 4 | 10 | 20 |
4 | 1 | 5 | 15 | 35 |
5 | 1 | 6 | 21 | 56 |
6 | 1 | 7 | 28 | 84 |
구한 결과
점화식이 나왔다.
DP[N][k] = (DP[N-1][k] + DP[N][k-1]) % 1000000000;
그리고 중요한 점은 문제에서 출력시 % 10억을 하라는 조건이 있으므로 잘 확인하자.
🔅 문제 풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static final int MOD = 1000000000;
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());
int[][] dp = new int[n + 1][k + 1];
// 0을 k개로 만드는 경우의 수는 모두 1
for (int i = 1; i <= k; i++) {
dp[0][i] = 1;
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % MOD;
}
}
System.out.println(dp[n][k]);
}
}
❗ 오답노트 / 필요한 지식
- 풀이 성공!
'baekjoon > DP' 카테고리의 다른 글
백준 2011번 : 암호코드 [자바] (0) | 2025.05.06 |
---|---|
백준 1965번 : 상자넣기 [자바] (0) | 2025.05.05 |
백준 2133번 : 타일 채우기 [자바] (0) | 2025.05.03 |
백준 10942번 : 팰린드롬? [자바] (0) | 2025.05.01 |
백준 9252번 : LCS2 [자바] (0) | 2025.04.30 |