olrlobt

[์ž๋ฐ”/๋ฐฑ์ค€ ๊ณจ๋“œ5] #12865 ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ๋ณธ๋ฌธ

Algorithm/๋ฐฑ์ค€

[์ž๋ฐ”/๋ฐฑ์ค€ ๊ณจ๋“œ5] #12865 ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

olrlobt 2023. 1. 9. 22:32

๐Ÿ”’ ๊ณจ๋“œ5 - #12865 ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

 

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

5 7
6 13
4 8
3 6
5 12
2 7

= 19

 

 

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

 

๋Œ€ํ‘œ์ ์ธ DP (๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ๋ฌธ์ œ์ด๋‹ค. 

 

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

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

 

๋จผ์ € ๊ฐ’์„ ์ €์žฅํ•  DP ํ…Œ์ด๋ธ” ๋งŒ๋“ ๋‹ค.

๊ฐ€๋กœ์ถ•์€ ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ,

์„ธ๋กœ์ถ•์—๋Š” ์ฐจ๋ก€๋Œ€๋กœ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

 

 

๋จผ์ € ์ฒซ๋ฒˆ์งธ ๋ฌผ๊ฑด์ธ, ๋ฌด๊ฒŒ 6์— ๊ฐ€์น˜ 13์˜ ๋ฌผ๊ฑด์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด,

๋ฌด๊ฒŒ 6๊นŒ์ง€๋Š” ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ DP (์บ์‹œ)์— 6๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

 

 

 

์ดํ›„, ๋‘๋ฒˆ์งธ ๋ฌผ๊ฑด์ธ ๋ฌด๊ฒŒ 4์— ๊ฐ€์น˜ 8์˜ ๋ฌผ๊ฑด์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋ฉด,

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌด๊ฒŒ 4๊นŒ์ง€๋Š” ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด ์ „ ๊ฐ’์ธ 0์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

 

 

 

 

์ดํ›„, 4๋ถ€ํ„ฐ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 8์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ 6๋ถ€ํ„ฐ๋Š” ์ฒซ๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ๋“œ๋Š” ๊ฒŒ ๊ฐ€์น˜๊ฐ€ ๋” ๋‚˜๊ฐ€๋ฏ€๋กœ,

์ด์ „ DP ๊ฐ’์ธ 13์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ธ๋ฒˆ์งธ ๋ฌผ๊ฑด์ธ ๋ฌด๊ฒŒ 3 ๊ฐ€์น˜ 6 ์ด ๋“ค์–ด๊ฐ”์„ ๋•Œ,

3์ผ ๋•Œ, 6

4,5,6 ์ผ ๋•Œ๋Š” ์ด์ „ DP์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ 7์ผ ๋•Œ ์ƒํ™ฉ์„ ๋ณด๋ฉด,

 

์ฒซ ๋ฒˆ์งธ ๋ฌผ๊ฑด์ธ 6์„ ๋“ค์—ˆ์„ ๋•Œ 13์˜ ๊ฐ€์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ,

๋‘ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ๋ฅผ ๊ฐ™์ด ๋“ค์—ˆ์„ ๋•Œ 6+8=14์˜ ๊ฐ€์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์‹œ ๋งํ•ด, ์„ธ ๋ฒˆ์งธ ๋ฌผ๊ฑด์ด ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ 7์˜ ๋ฌด๊ฒŒ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š”

์ด ์ „๊นŒ์ง€ ๊ฒฝ์šฐ์—์„œ 7์„ ๋“œ๋Š” ๊ฒฝ์šฐ ( ์ด ์ „ DP์˜ 7์„ ๋“œ๋Š” ๊ฒฝ์šฐ)์™€

์ด๋ฒˆ ๋ฌผ๊ฑด์„ ํ•„์ˆ˜๋กœ ๋“ค๊ฒŒ ๋˜์—ˆ์„๋•Œ 7์„ ๋“œ๋Š” ๊ฒฝ์šฐ ์ค‘ ํฐ ๊ฐ’์˜ ๊ฒฝ์šฐ๊ฐ€ ๋œ๋‹ค.

 

 

์ด๋ฒˆ ๋ฌผ๊ฑด์„ ํ•„์ˆ˜๋กœ ๋“ค๊ฒŒ ๋˜์—ˆ์„ ๋•Œ์˜ ๊ฒฝ์šฐ๋Š”

์ด 7์˜ ๋ฌด๊ฒŒ์—์„œ ์ด๋ฒˆ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ( = 3)๋ฅผ ๋บ€ 4์˜ ๋ฌด๊ฒŒ๋ฅผ ๋“œ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ด ์ „ DP์—์„œ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.

 

 

๋”ฐ๋ผ์„œ, ์ด๋ฒˆ ๋ฌผ๊ฑด์„ ๋“ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ 13๊ณผ์ด๋ฒˆ ๋ฌผ๊ฑด์„ ํ•„์ˆ˜๋กœ ๋“œ๋Š” ๊ฒฝ์šฐ 6+8=14 ์ค‘

ํฐ ๊ฐ’์€ 14์ด๋ฏ€๋กœ 14๊ฐ€ ์ฑ„์›Œ์ง€๊ฒŒ ๋œ๋‹ค.

 

 

 

 

๋„ค ๋ฒˆ์งธ ๋ฌผ๊ฑด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฑ„์šฐ๊ฒŒ ๋˜๋ฉด ์œ„์™€ ๊ฐ™์•„์ง„๋‹ค.

 

 

 

 

 

๋ฐฑ์ค€์—์„œ ์ฃผ์–ด์ง€๋Š” ๋„ค ๋ฒˆ์งธ ์˜ˆ์‹œ๊นŒ์ง€๋กœ๋Š” ์ดํ•ด๊ฐ€ ๋œ ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ,

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ถ”๊ฐ€ ํžŒํŠธ์— ๋‹ค์„ฏ ๋ฒˆ์งธ ์˜ˆ์‹œ(๋ฌด๊ฒŒ 2 ๊ฐ€์น˜ 7)๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

 

4๊นŒ์ง€๋Š” ์‰ฝ๊ฒŒ ์ฑ„์šธ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

 

 

 

๋‹ค์Œ 5์˜ ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด, ์ด ์ „๊นŒ์ง€ 5์˜ ๋ฌด๊ฒŒ์—์„œ ์ตœ๋Œ€ ๊ฐ€์น˜๋Š” 12์˜€๋‹ค.

ํ•˜์ง€๋งŒ, 5์˜ ๋ฌด๊ฒŒ์—์„œ ๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฌผ๊ฑด์„ ํ•„์ˆ˜๋กœ ๋“œ๋Š” ๊ฒฝ์šฐ๋Š”

 

[(๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜) + { (๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ) - (๋‹ค์„ฏ ๋ฒˆ์งธ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ)}์˜ ๊ฐ€์น˜]์™€ ๊ฐ™๋‹ค.

 

๋‘˜ ์ค‘, ํฐ ๊ฐ’์„ ์ฑ„์›Œ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ,

 

์ด ์ „๊นŒ์ง€ 6 ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ€ ๊ฐ€์น˜๋Š” 13์ด๊ณ ,

 

ํ˜„์žฌ ๋ฌผ๊ฑด ๋ฌด๊ฒŒ 2์˜ ๊ฐ€์น˜๋Š” 7,

6 - 2 = 4 ์ด๋ฏ€๋กœ 4์˜ ๋ฌด๊ฒŒ๋ฅผ ๋“œ๋Š” ์ตœ๋Œ€ ๊ฐ€์น˜๋Š” 8์ด๋‹ค. 7+8= 15

 

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ,

์ด ์ „๊นŒ์ง€ 7 ๋ฌด๊ฒŒ์˜ ์ตœ๋Œ€๊ฐ€์น˜๋Š” 14,

 

ํ˜„์žฌ ๋ฌผ๊ฑด 2์˜ ๊ฐ€์น˜ 7, 5์˜ ๊ฐ€์น˜ 12 ์ด๋ฏ€๋กœ, 7+12 = 19์ด๋‹ค.

 

 

 

 

 

 

์ด์ œ ์œ„์˜ ๊ฒฝ์šฐ๋กœ ์ ํ™”์‹์„ ๋„์ถœํ•˜๋ฉด ๋œ๋‹ค.

 

์ด ๊ฐ€์น˜  =  ์ตœ๋Œ“๊ฐ’ { ์ด์ „ ๋ฌผ๊ฑด๊นŒ์ง€์˜ ๊ฐ€์น˜,  ํ˜„์žฌ ๋ฌผ๊ฑด ๊ฐ€์น˜   +  ( ์ด ๋ฌด๊ฒŒ - ํ˜„์žฌ ๋ฌด๊ฒŒ)์˜ ๊ฐ€์น˜ }

dp [ i ][ j ] =  Math.maxdp [ i-1 ][ j ]  ,  thing [ i ][ 1 ]   +    dp [ i - 1 ] [ j -  thing[ i ][ 0 ] ]  )

 

 

์œ„์™€ ๊ฐ™์ด ๋„์ถœํ•  ์ˆ˜๋„ ์žˆ๊ณ ,

 

dp [ i ][ j ] = thing[ i ][ 1 ]   +    dp [ i - 1 ] [ j -  thing[ i ][ 0 ] ]๋กœ 

๋‹จ, dp [ i - 1 ] [ j ] ๋ณด๋‹ค ํฌ๋‹ค๋Š” ์กฐ๊ฑด์„ ๊ฑธ์–ด์ค„ ์ˆ˜ ๋„ ์žˆ๋‹ค.

 

 

 

 

 

์œ„ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ, 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํ’€์–ด๋„, 2์ฐจ์› ๋ฐฐ์—ด๋กœ ํ’€์–ด๋„ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋‹ค๋งŒ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด ์ „ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ž„์‹œ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค.

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๋‚˜์˜ ํ’€์ด๋กœ, ๋ฐฐ์—ด๋ณด๋‹ค๋Š” List๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— List๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

List ์—ญ์‹œ ์ž„์‹œ List์ธ newDp๋ฅผ ์„ ์–ธํ•ด์ฃผ์–ด ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

 

 

 

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

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class baekjoon12865 {

    static List<Integer> dp = new ArrayList<>();
    static List<int[]> things = new ArrayList<>();
    static int K;
    static int N;

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

        N = sc.nextInt();
        K = sc.nextInt();
        for (int testCase = 0; testCase < N; testCase++) {
            int W = sc.nextInt();
            int V = sc.nextInt();

            int[] P = {W, V};
            things.add(P);
        }

        solve();
    }

    public static void solve() {
        for (int i = 0; i < K + 1; i++) {
            dp.add(0);
        }
        List<Integer> newDp = new ArrayList<>(dp);

        for (int index = 0; index < N; index++) {
            for (int i = things.get(index)[0]; i < K+1; i++) {
                if (dp.get(i) < things.get(index)[1] + dp.get(i - things.get(index)[0])) {
                    newDp.set(i, things.get(index)[1] + dp.get(i - things.get(index)[0]));
                }
            }

            dp = new ArrayList<>(newDp);

        }
        System.out.println(dp.get(K));
    }
}

 

 

 

Comments