📖 문제
2225번: 합분해
첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
💡 풀이 방식
• DP
DP[K][N] : 숫자 K개를 사용해 N을 만들 수 있는 경우의 수
1. 초기화
숫자 K개로 0을 만드는 경우의 수는 항상 1개이다.
for(int i = 1 ; i <= K ; i++) {
dp[i][0] = 1;
}
2. 점화식 찾기
표를 그리다 보면, 한 칸은 해당 칸의 위쪽 값과 왼쪽 값을 합한 값으로 채우는 규칙을 발견할 수 있다.
그렇기 떄문에 점화식이 아래와 같이 성립된다.
for(int i = 1 ; i <= K ; i++) {
for(int j = 1 ; j <= N ; j++) {
dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % MOD;
}
}
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.io.*;
public class Main {
static final int MOD = 1_000_000_000;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int N = Integer.parseInt(str[0]);
int K = Integer.parseInt(str[1]);
long[][] dp = new long[201][201];
// 초기화
for(int i = 1 ; i <= K ; i++) {
dp[i][0] = 1;
}
for(int i = 1 ; i <= K ; i++) {
for(int j = 1 ; j <= N ; j++) {
dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % MOD;
}
}
System.out.println(dp[K][N]);
}
}
|
cs |
➕ 다른 풀이 방식
내가 원래 풀려고 했던 방식!
[JAVA] 백준 2225번 : 합분해
백준 2225번 문제 풀이
velog.io
점화식을 dp[N][K]로 잡아서 풀었었다. (dp[N][K]
: K개로 N 만드는 경우의 수)
1%에서 틀려서 뭐지,,,했는데 범위를 잘못 잡아서 그랬던 것이었다..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.*;
import java.io.*;
public class Main {
static final int MOD = 1_000_000_000;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int N = Integer.parseInt(str[0]);
int K = Integer.parseInt(str[1]);
int[][] dp = new int[201][201];
for(int i = 1 ; i <= 200 ; i++) {
dp[i][1] = 1;
dp[1][i] = i;
}
for(int i = 2 ; i <= N ; i++) {
for(int j = 2 ; j <= K ; j++) {
dp[i][j] = (dp[i-1][j] + dp[i][j-1]) % MOD;
}
}
System.out.println(dp[N][K]);
}
}
|
cs |
💦 어려웠던 점
- 범위를 잘못잡아서 정답이 안 나왔던 것이었다,,,
🧐 새로 알게 된 내용
- 범위를 잘 잡자,,
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[JAVA] 백준 2225번 : 합분해
2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 - 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램 - 덧셈의 순서가 바뀐
hu-coding.tistory.com
백준 2225 자바 - 합분해 (BOJ 2225 JAVA)
문제 : boj2225 1. 0부터 N까지에서 '0부터' 부분 때문에 좀 헷갈렸다. '덧셈의 순서가 바뀐 경우는 다른 경우로 센다' 라는 부분 때문에, 예를들어서 N이 1이라 해도 K가 5라면 1+0+0+0+0 / 0+1+0+0+0 / ... / 0+
nahwasa.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 18428번: 감시 피하기 (0) | 2024.04.26 |
---|---|
[백준/JAVA] 10026번: 적록색약 (1) | 2024.04.25 |
[백준/JAVA] 17141번: 연구소 2 (0) | 2024.04.24 |
[백준/JAVA] 20058번: 마법사 상어와 파이어스톰 (0) | 2024.04.24 |
[백준/JAVA] 15990번: 1, 2, 3 더하기 5 (0) | 2024.04.23 |