Java/Java-1차캐시

[백준] 2294 : 동전2

프로버티기 2025. 3. 11. 13:20

문제

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