๐ŸŒžAlgorithm/๐Ÿ”ฅBaekjoon

[Baekjoon] 2294_๋™์ „ 2

๋ฟŒ์•ผ._. 2026. 1. 7. 11:13
๋ฌธ์ œ(์ถœ์ฒ˜: 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] ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.