๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/2294)
< ๋์ 2 >
๋ฌธ์ ํ์ด
์ฃผ์ด์ง ์์์ ๊ฐ์ด ๋์ ์ด [1, 5, 12] ์๊ณ , 15๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์.
1์ผ ๋ 1 ๋์ 1๊ฐ
2์ผ ๋ 1 ๋์ 2๊ฐ
...
5์ผ ๋ 1 ๋์ 5๊ฐ, 5 ๋์ 1๊ฐ -> 5 ๋์ 1๊ฐ
์ด๋ฐ ์์ผ๋ก ๊ตฌํ๋ฉด ์๋์ ๊ฐ์ด ๊ตฌํด์ง๋ค.

my solution (Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class _2294_ { // ๋์ 2
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(bf.readLine());
}
int dp[] = new int[k + 1];
for (int i = 1; i < k + 1; i++) {
dp[i] = Integer.MAX_VALUE;
}
for (int i = 1; i < k + 1; i++) {
for (int j = 0; j < n; j++) {
if (i - arr[j] < 0 || dp[i - arr[j]] == Integer.MAX_VALUE) {
continue;
}
dp[i] = Math.min(dp[i], dp[i - arr[j]] + 1);
}
}
if (dp[k] == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(dp[k]);
}
}
}
๋ณ์)
n, k : ๋์ ์ข ๋ฅ ๊ฐ์, ํฉ
arr : ๋์ ๊ฐ์น
dp : ์ฌ์ฉํ ๋์ ์ ๊ฐ์
๋์ ์ข ๋ฅ ๊ฐ์์ ํฉ์ ์ ๋ ฅ๋ฐ๋๋ค. ๋์ ์ข ๋ฅ ๊ฐ์๋งํผ ๋์ ์ ๊ฐ์น๋ฅผ ์ ๋ ฅ๋ฐ์ arr์ ์ ์ฅํ๋ค. 1๋ถํฐ k์๊น์ง ํ์ํ๋ฉฐ (ํ์ฌ ๊ฐ์น - ๋์ ๊ฐ)์ด 0๋ณด๋ค ์๊ฑฐ๋ ๊ทธ ๊ฐ์ ๋ง๋ค ์ ์์๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ ๋์ ์ ๊ฐ์๋ฅผ ์ต์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๋ค.
์ต์ข dp [k] ๊ฐ์ด Integer.MAX_VALUE์ธ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ๋ dp [k] ๊ฐ์ ์ถ๋ ฅํ๋ค.

'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Baekjoon] 9711_ํผ๋ณด๋์น (0) | 2026.01.09 |
|---|---|
| [Baekjoon] 1965_์์๋ฃ๊ธฐ (0) | 2026.01.08 |
| [Baekjoon] 11054_๊ฐ์ฅ ๊ธด ๋ฐ์ดํ ๋ ๋ถ๋ถ ์์ด (0) | 2026.01.06 |
| [Baekjoon] 14442_๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 (0) | 2026.01.05 |
| [Baekjoon] 25101_Robin Hood (0) | 2025.12.18 |