๐ก ๋ฌธ์ ์์ฝ
- n๊ฐ์ง ์ข ๋ฅ์ ๋์ ์ ๊ฐ์ง๊ณ ์์
- ๊ฐ๊ฐ์ ๋์ ์ ์ค๋ณตํด์ ์ฌ์ฉํ ์ ์์
- ์ด ๋์ ๋ค์ ์ด์ฉํด ์ดํฉ์ด
k์์ด ๋๋๋ก ํ ๋, - ํ์ํ ๋์ ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ผ
- ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ -1์ ์ถ๋ ฅํ๋ผ
๐ง ๋ฌธ์ ๋ถ์
- ์ ํ์ ์ธ ๋์ ์ต์ ๊ฐ์ DP ๋ฌธ์
- ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก 1์ฐจ์ DP ํ ์ด๋ธ์ ๊ตฌ์ฑํ์ฌ ํ์ด
๐ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
1๏ธโฃ DP ๋ฐฐ์ด ์ ์
dp[j]= j์์ ๋ง๋ค๊ธฐ ์ํ ์ต์ ๋์ ๊ฐ์- ์ด๊ธฐ๊ฐ:
dp[0] = 0, ๋๋จธ์ง๋INF(ํฐ ๊ฐ)
2๏ธโฃ ์ ํ์
- ๊ฐ ๋์ ๊ธ์ก
c์ ๋ํดdp[j] = min(dp[j], dp[j - c] + 1)
3๏ธโฃ ์ต์ข ์ ๋ต
dp[k]๊ฐINF์ด๋ฉด ๋ง๋ค ์ ์๋ ๊ธ์ก โ-1์ถ๋ ฅ- ์๋๋ฉด
dp[k]์ถ๋ ฅ
โ ์ฝ๋ ๊ตฌํ (Java)
import java.io.*;
import java.util.*;
public class Main {
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[] coin = new int[n];
for (int i = 0; i < n; i++) {
coin[i] = Integer.parseInt(br.readLine());
}
int INF = k + 1;
int[] dp = new int[k + 1];
Arrays.fill(dp, INF);
dp[0] = 0;
for (int i = 0; i < n; i++) {
int c = coin[i];
for (int j = c; j <= k; j++) {
dp[j] = Math.min(dp[j], dp[j - c] + 1);
}
}
System.out.println(dp[k] > k ? -1 : dp[k]);
}
}
โฑ๏ธ ์๊ฐ ๋ณต์ก๋
- O(N ร K)
- N: ๋์ ์ข ๋ฅ ์ (์ต๋ 100), K: ๊ธ์ก (์ต๋ 10,000)
- 10^6 ์ด๋ด์ด๋ฏ๋ก ์ถฉ๋ถํ ๊ฐ๋ฅ
๐ ์ ๋ฆฌ
- ๊ฐ ๊ธ์ก๋ง๋ค ์ต์ ๋์ ๊ฐ์๋ฅผ ๋ฉ๋ชจ์ด์ ์ด์ ๋ฐฉ์์ผ๋ก ์ ์ฅ
- ๋ชจ๋ ๋์ ์ผ๋ก K๊น์ง ๋์ ๊ณ์ฐํ์ฌ ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฐฉ์
- 2์ค for๋ฌธ์ด์ง๋ง ๋ด๋ถ ์ฐ์ฐ์ด ๋งค์ฐ ์๊ณ ๋น ๋ฆ
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค 2248 - ์ด์ง์ ์ฐพ๊ธฐ(Java) (1) | 2025.06.07 |
|---|---|
| ๋ฐฑ์ค 10800๋ฒ: ์ปฌ๋ฌ๋ณผ (Java) (1) | 2025.06.04 |
| ๋ฐฑ์ค 1167: ํธ๋ฆฌ์ ์ง๋ฆ(Java) (0) | 2025.05.26 |
| ๋ฐฑ์ค 1976: ์ฌํ ๊ณํ(Java) (0) | 2025.05.24 |
| ํ๋ก๊ทธ๋๋จธ์ค PCCP๋ชจ์๊ณ ์ฌ#1 4๋ฒ๋ฌธ์ (0) | 2025.05.14 |