olrlobt

[JAVA/๋ฐฑ์ค€ ๊ณจ๋“œ5] #2294 ๋™์ „ 2 ๋ณธ๋ฌธ

Algorithm/๋ฐฑ์ค€

[JAVA/๋ฐฑ์ค€ ๊ณจ๋“œ5] #2294 ๋™์ „ 2

olrlobt 2023. 1. 11. 00:25

https://www.acmicpc.net/problem/2294

๐Ÿ”’ ๊ณจ๋“œ5 - #2294 ๋™์ „ 2

 

๐Ÿ“Œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ถ”๊ฐ€ ํžŒํŠธ

2 15
3
5

= 3
2 15
2
1

= 8

 

โœ๏ธ ํ’€์ด๋ฒ•

 

๋Œ€ํ‘œ์ ์ธ DP ๋ฌธ์ œ์ด๊ณ ,  ์ด ์ „ ํฌ์ŠคํŠธ์ธ ๋™์ „ 1 ๋ฌธ์ œ์™€ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DP ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ, ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ์€

์บ์‹ฑ์„ ํ†ตํ•œ ์ ํ™”์‹ ๋„์ถœ์ด๋‹ค.

 

 

์บ์‹ฑ์„ ์œ„ํ•ด DP ํ…Œ์ด๋ธ”์„ ๊ทธ๋ ค๋ณด๋ฉด,

๊ฐ€๋กœ์ถ•์— K์›์ด ๋˜๊ธฐ ์œ„ํ•œ ๊ฐ€์น˜๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์„ธ๋กœ์ถ•์— ๋™์ „์„ ํ•˜๋‚˜์”ฉ ์ถ”๊ฐ€ํ•˜๋ฉฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋ณด์ž.

 

๋จผ์ €, 1์›์งœ๋ฆฌ ๋™์ „์„ ์ถ”๊ฐ€ํ•ด ์ค€๋‹ค.

์ฒซ ๋™์ „ ๋งŒ์œผ๋กœ๋Š” ์ ํ™”์‹์„ ๋„์ถœํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ, ๋‹ค์Œ ๋™์ „์œผ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

 

5์›์งœ๋ฆฌ ๋™์ „์„  ์ถ”๊ฐ€ํ•ด ์ฃผ๊ฒŒ ๋˜๋ฉด, 4์›๊นŒ์ง€๋Š” ์บ์‹œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค.

 

์ดํ›„, 5์›์„ ๋งŒ๋“ค ๋•Œ๋ถ€ํ„ฐ๋Š” 5์›์งœ๋ฆฌ ๋™์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜๋Š” ๋™์ „์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ค„๊ฒŒ ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ, 5์›์งœ๋ฆฌ ๋™์ „์„ ํ•˜๋‚˜ ์ด์ƒ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“ค ๊ฒฝ์šฐ๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.

 

๋จผ์ € 5์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ.

5์›์„ ํ•˜๋‚˜ ์ด์ƒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—,

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ฐ’ 5์—์„œ ํ˜„์žฌ ๋™์ „์˜ ๊ฐ€์น˜์ธ 5๋ฅผ ๋นผ์ฃผ๊ณ , ๊ทธ ๊ฐ’์„ ์บ์‹œ์—์„œ ์ฐพ๋Š”๋‹ค.

 

์ด ๋ง์€ ์ฆ‰, dp [5 - 5]๋ฅผ ์ฐพ์•„๋‚ด๊ณ  5๋ฅผ ํ•˜๋‚˜ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 1์„ ๋”ํ•ด์ค€๋‹ค.

 

๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ๋ณด์•˜์„ ๋•Œ์˜ ์ ํ™”์‹์€, 

dp [ i ] = dp [ i - coin [index] ] + 1

 

 

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 10์› ์ด์ƒ์„ ๋งŒ๋“ค ๋•Œ, 5์›์งœ๋ฆฌ ๋™์ „์„ 2๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

 

์œ„์˜ ์ ํ™”์‹์„ ํ† ๋Œ€๋กœ 12์›์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด,

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” 12์›์—์„œ, ํ˜„์žฌ ๋™์ „์„ ํ•˜๋‚˜ ํฌํ•จํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ „์˜ ๊ฐ€์น˜๋ฅผ ๋นผ์ค€๋‹ค. 12-5=7.

๋”ฐ๋ผ์„œ dp [7]์— 1์„ ๋”ํ•˜๋ฉด 4๊ฐ€ ๋„์ถœ๋œ๋‹ค.

 

dp [12] = 4

 

๋‚˜๋จธ์ง€ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฑ„์›Œ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

๋‹ค์Œ์œผ๋กœ 12์›์งœ๋ฆฌ ๋™์ „์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

12์› ์—ญ์‹œ ์œ„์˜ ์ ํ™”์‹์œผ๋กœ ๊ฐ’์„ ๋„์ถœํ•˜๋ฉด,

 

13์›์„ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ,

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” 13์›์—์„œ, ํ˜„์žฌ ๋™์ „์„ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๋ฏ€๋กœ, 13-12=1.

dp [1] + 1 = 2์˜ ๊ฐ’์„ ๋„์ถœํ•œ๋‹ค.

 

14 ์—ญ์‹œ

14-12=2 ์ด๋ฏ€๋กœ,

dp [2] + 1 = 3์˜ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ 15๋ฅผ ๋ณด์ž.

 

๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” 15์—์„œ 12๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๋ฏ€๋กœ, 15-12=3.

dp [3] = 3  ์ด๋ฏ€๋กœ

dp [15] = 3+1 = 4์˜ ๊ฐ’. ์ฆ‰, ์›๋ž˜ ์ €์žฅ๋˜์–ด ์žˆ๋˜ 3์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋ฏ€๋กœ,

 

๊ธฐ์กด ์บ์‹œ์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ ์ตœ์†Ÿ๊ฐ’์„ ๋„์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

 

๋”ฐ๋ผ์„œ ์ตœ์†Ÿ๊ฐ’์„ ๋„์ถœํ•˜๋Š” ์ ํ™”์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

dp [ i ] = Math.min( dp [ i ], dp [ i - coin [index] ] + 1)

 

ํ•˜์ง€๋งŒ Math.min์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ๋ฐฐ์—ด ์„ ์–ธ ์‹œ ์ดˆ๊ธฐํ™” ๊ฐ’์ธ 0์˜ ๊ฐ’์ด ๊ณ„์† ๋“ค์–ด๊ฐ€๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

 

์ด ์˜ˆ์‹œ์—์„œ๋Š”, ์ฒซ ๋™์ „์ด 1์›์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ์งธ ๋™์ „๊ณผ ์„ธ ๋ฒˆ์งธ ๋™์ „์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ,

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ถ”๊ฐ€ ํžŒํŠธ๋ฅผ ๋ณด๋ฉฐ,  ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ• ์ง€ ๊ฐ์„ ์žก์•„๋ณด์ž.

 

2 15
3
5

= 3

 

์ฒซ ๋™์ „์ธ 3์›์˜ ๊ฒฝ์šฐ๋Š” ์ž„์˜๋กœ ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค.

 

๋‘ ๋ฒˆ์งธ ๋™์ „์ธ 5์›์„ ์ถ”๊ฐ€ํ•˜๋ฉด, 5์›์ด ์‚ฌ์šฉ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ์ด ์ „์˜ ์บ์‹œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

 

 

์—ฌ๊ธฐ์„œ 5์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด, ์ ํ™”์‹ dp [ i ] = Math.min( dp [ i ], dp [ i - coin [index] ] + 1)๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด,

 

5์›์„ 1๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ต์ด 1์ด ๋˜์–ด์•ผ ํ•˜์ง€๋งŒ

Math.min์— ์˜ํ•ด ์ด์ „ ์บ์‹œ ๊ฐ’์ธ 0์ด ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด 0์ด ์•„๋‹Œ, 1์ด ์ฑ„์›Œ์ง€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

๋ฐฉ๋ฒ•์€ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค.

 

0์ด ์ฑ„์›Œ์ง€๋Š” ์ด์œ ๋Š” ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ๊ฐ’์ด 0์ธ๋ฐ Math.min์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ, ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ ๊ฐ’์„ ํฐ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋ฉด ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ๋œ๋‹ค.

 

ํ•ด๋‹น ๋ฌธ์ œ๋Š” "๋™์ „์˜ ๊ฐ€์น˜๋Š” 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค"๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ์œผ๋ฏ€๋กœ, 100,001๋กœ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ—๏ธ JAVA ํ’€์ด

import java.util.Arrays;
import java.util.Scanner;

public class baekjoon2294 {

    static int K;
    static int[] dp;
    static int[] coin;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        K = sc.nextInt();
        coin = new int[N];
        dp = new int[K + 1];
        Arrays.fill(dp,100001);
        
        for (int testCase = 0; testCase < N; testCase++) {
            coin[testCase] = sc.nextInt();
        }

        solve();
    }

    public static void solve() {

        dp[0] = 0;

        for (int index = 0; index < coin.length; index++) {
            for (int i = coin[index]; i <= K; i++) {
                dp[i] = Math.min(dp[i], dp[i - coin[index]] + 1);
            }
        }

        if (dp[K] == 100001) {
            dp[K] = -1;
        }
        System.out.println(dp[K]);
    }
}
Comments