๊ธฐ๋ก๋ฐฉ

BOJ_12865 : ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_12865 : ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

Soom_1n 2023. 2. 20. 17:52

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ๊ฐ€์น˜์˜ ์ด ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ๋ฐฐ๋‚ญ์— ๋ฌผ๊ฑด์„ ๋‹ด๊ณ , ๊ทธ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ „ํ˜•์ ์ธ dp๋ฌธ์ œ์ด๋‹ค.
    • ๊ฐ€๋ฐฉ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์„ 0๋ถ€ํ„ฐ k๊นŒ์ง€ ๋Š˜๋ ค๊ฐ€๋ฉฐ ์ตœ์ ๊ฐ’์„ ๋ˆ„์ ํ•ด ๊ฐ„๋‹ค.
    • ํ•œ ๋ฌผ๊ฑด์— ๋Œ€ํ•ด, ๋„ฃ์—ˆ์„๋•Œ์™€ ์•ˆ๋„ฃ์—ˆ์„๋•Œ ์–ด๋Š ๊ฐ’์ด ๋” ์ตœ์ ์ธ์ง€ ๋น„๊ตํ•ด ๊ฐ€๋ฉฐ ๋ˆ„์ ํ•ด ๊ฐ„๋‹ค.
    • ๋ฌด๊ฒŒ ์ œํ•œ์ด k์ด๋ฉด์„œ ๋ชจ๋“  ๋ฌผ๊ฑด์ด ๊ณ ๋ ค๋œ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • dp๋ฅผ 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());
        Obj[] objs = new Obj[n+1];
        for (int i = 1; i <= n; i++) {
            st = new StringTokenizer(br.readLine());
            objs[i] = new Obj(Integer.parseInt(st.nextToken()),Integer.parseInt(st.nextToken()));
        }

        int[][] dp = new int[n+1][k+1];

        for (int i = 1; i <= n; i++) {      // ๋ฌผ๊ฑด ์ˆœํšŒ
            for (int j = 1; j <= k; j++) {  // ๋ฐฐ๋‚ญ ์ œํ•œ ๋ฌด๊ฒŒ ์ˆœํšŒ
                if (objs[i].w <= j) {       // ํ˜„์žฌ ๋ฌผ๊ฑด ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ
                    dp[i][j] = Math.max(dp[i-1][j], dp[i-1][j-objs[i].w]+objs[i].v); // ๋„ฃ์—ˆ์„ ๋•Œ์™€ ๋„ฃ์ง€ ์•Š์•˜์„๋•Œ ๋น„๊ต
                }
                else {                      // ํ˜„์žฌ ๋ฌผ๊ฑด ๋„ฃ์„ ์ˆ˜ ์—†์–ด์„œ ์ด์ „ ์ตœ์ ๊ฐ’
                    dp[i][j] = dp[i-1][j];
                }
            }
        }
        System.out.println(dp[n][k]);
    }

    private static class Obj{
        int w, v;

        public Obj(int w, int v) {
            this.w = w;
            this.v = v;
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ๋ฌผ๊ฑด๋“ค์„ ํ•˜๋‚˜์”ฉ ๊ณ ๋ คํ•ด๋ณธ๋‹ค.
  • ๋ฐฐ๋‚ญ ๋ฌด๊ฒŒ ์ œํ•œ์„ 1๋ถ€ํ„ฐ k๊นŒ์ง€ ๋Š˜๋ฆฌ๋ฉฐ dp๋ฐฐ์—ด์„ ์ฑ„์›Œ๊ฐ„๋‹ค.
    • ๋ฌผ๊ฑด์˜ ์ˆ˜๋‚˜ ๋ฐฐ๋‚ญ ๋ฌด๊ฒŒ ์ œํ•œ์ด 0์ด๋ฉด dp๋ฐฐ์—ด์˜ ๊ฐ’์€ 0์ด๋‹ค.
    • ๋งŒ์•ฝ ์ œํ•œ ๋ฌด๊ฒŒ๋ณด๋‹ค ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๊ฐ€ ์ž‘๋‹ค๋ฉด(ํ•ด๋‹น ๋ฌผ๊ฑด์„ ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด),
      ๋ฌผ๊ฑด์„ ๋„ฃ์—ˆ์„๋•Œ์™€ ๋„ฃ์ง€ ์•Š์•˜์„ ๋•Œ๋ฅผ ๋น„๊ตํ•ด์„œ ๋” ํฐ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
      • ๋ฌผ๊ฑด์„ ๋„ฃ์ง€ ์•Š์•˜์„ ๋•Œ์˜ ์ตœ์ ๊ฐ’์€ ์ง์ „ ๋ฌผ๊ฑด์˜ ๊ฐ™์€ ๋ฐฐ๋‚ญ ๋ฌด๊ฒŒ ์ œํ•œ์— ๊ฐ’์ด๋ฏ€๋กœ dp[i-1][j]์ด๋‹ค.
      • ๋ฌผ๊ฑด์„ ๋„ฃ์—ˆ์„๋•Œ์˜ ์ตœ์ ๊ฐ’์€, ๋ฌผ๊ฑด์„ ๋„ฃ๊ณ  ๋ฌด๊ฒŒ ์ œํ•œ ๋‚จ์€ ๋ถ€๋ถ„์— ์ตœ์ ๊ฐ’์„ ๋„ฃ์€ ์ƒํƒœ์ด๋‹ค.
        (๋ฌผ๊ฑด์„ ๋„ฃ์Œ : objs[[i].v , ๋‚จ์€ ๊ณต๊ฐ„์˜ ์ตœ์ ๊ฐ’ : dp[i-1][ j - ojbs[i].w] )
    • ํ˜„์žฌ ๋ฌผ๊ฑด์„ ๋„ฃ์„ ์ˆ˜ ์—†์œผ๋ฉด, ์ง์ „ ๋ฌผ๊ฑด์˜ ์ตœ์ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ ๋Š”๋‹ค. ( dp[i-1][j] )
  • ๊ฐ™์€ ๋ฐฐ๋‚ญ ๋ฌด๊ฒŒ ์ œํ•œ์—์„œ ๋ชจ๋“  ๋ฌผ๊ฑด์ด ๊ณ ๋ ค๋œ ์ตœ์ ๊ฐ’์ธ dp[n][k]๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • 2์ฐจ์› dp๋ฅผ ๊ทธ๋ฆผ์„ ๊ทธ๋ ค์„œ ๋งŽ์ด ํ’€์ดํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ „ํ˜•์ ์ธ ์œ ๋ช…ํ•œ dp๋ฌธ์ œ๋ผ๋Š”๋ฐ, ์—„์ฒญ ์‹ ์„ ํ•œ ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜๋‹ค. (์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ํ’€์ด๋ฅผ)

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_4963 : ์„ฌ์˜ ๊ฐœ์ˆ˜  (0) 2023.02.21
BOJ_17281 : โšพ  (0) 2023.02.20
BOJ_14888 : ์—ฐ์‚ฐ์ž ๋ผ์›Œ๋„ฃ๊ธฐ  (0) 2023.02.20
BOJ_19621 : ํšŒ์˜์‹ค ๋ฐฐ์ • 2  (0) 2023.02.20
BOJ_1697 : ์ˆจ๋ฐ”๊ผญ์งˆ  (0) 2023.02.12