문제
https://www.acmicpc.net/problem/2294
입출력
3 15
1
5
12
3
아이디어
dp[i] = Math.min( dp[i-coins[n]] + 1, dp[n])
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N, K; // N가지 종류 동전 -> 합이 K
static int[] coins;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
K = Integer.parseInt(st.nextToken());
coins = new int[N];
for (int i = 0; i < N; i++) {
coins[i] = Integer.parseInt(br.readLine()); // 코인 갯수
}
// 동전의 개수가 최소가 되도록!
int[] dp = new int[K + 1]; // k원을 만드는 데 사용된 동전의 수
Arrays.fill(dp, Integer.MAX_VALUE);
dp[0] = 0;
for (int i = 0; i < N; i++) {
if (coins[i] <= K) {
dp[coins[i]] = 1;
}
}
// dp[i] = dp[i-coins[n]] + 1;
for (int i = 0; i <= K; i++) {
for (int n = 0; n < N; n++) {
if (i - coins[n] < 0)
continue;
if (dp[i - coins[n]] != Integer.MAX_VALUE) {
dp[i] = Math.min(dp[i], dp[i - coins[n]] + 1);
}
}
}
System.out.println(dp[K] == Integer.MAX_VALUE ? -1 : dp[K]);
}
}
'Java > Java-1차캐시' 카테고리의 다른 글
[프로그래머스] 숫자 변환하기 (0) | 2025.04.12 |
---|---|
[프로그래머스] 주식가격 (0) | 2025.04.07 |
[백준] 11054 : 가장 긴 바이토닉 수열 (0) | 2025.03.08 |
[백준] 1043 : 거짓말 (0) | 2025.03.06 |
[백준] 1261 : 알고스팟 (0) | 2025.03.04 |