https://www.acmicpc.net/problem/9084
1. 아이디어
Coins 문제와 동일한 문제다.([코딩테스트 준비/백준] - [백준] 3067번 - Coins [Java])
2. 문제풀이
동일하게 다이나믹 프로그래밍을 활용한 무한 배낭으로 해결했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main_1D {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
int N = Integer.parseInt(br.readLine());
int[] coins = new int[1 + N];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
coins[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
int[] dp = new int[1 + M];
// 0원을 만들 수 있는 경우는 1가지
dp[0] = 1;
for (int i = 1; i <= N; i++) {
// 중복 선택을 위해 앞에서부터 갱신
for (int j = coins[i]; j <= M; j++) {
dp[j] += dp[j - coins[i]];
}
}
sb.append(dp[M]).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
import java.io.*;
import java.util.*;
public class Main_2D {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for (int tc = 1; tc <= T; tc++) {
int N = Integer.parseInt(br.readLine());
int[] coins = new int[1 + N];
st = new StringTokenizer(br.readLine());
for (int i = 1; i <= N; i++) {
coins[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
int[][] dp = new int[1 + N][1 + M];
for (int i = 1; i <= N; i++) {
// 0원을 만들 수 있는 경우는 1가지
dp[i][0] = 1;
for (int j = 1; j <= M; j++) {
dp[i][j] = dp[i - 1][j];
if (j >= coins[i]) dp[i][j] += dp[i][j - coins[i]];
}
}
sb.append(dp[N][M]).append("\n");
}
bw.write(sb.toString());
bw.flush();
}
}
4. 후기
- 1차원 dp
- 2차원 dp
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 2293번 - 동전 1 [Java] (0) | 2025.02.27 |
---|---|
[백준] 2629번 - 양팔저울 [Java] (0) | 2025.02.26 |
[백준] 3067번 - Coins [Java] (0) | 2025.02.26 |
[백준] 12865번 - 평범한 배낭 [Java] (0) | 2025.02.26 |
[백준] 23290번 - 마법사 상어와 복제 [Java] (1) | 2025.02.24 |