Algorithm/문제 풀이 / / 2022. 11. 24. 20:30

[BAEKJOON_12865 - JAVA] 평범한 배낭

반응형

문제

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

 

12865번: 평범한 배낭

첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000)

www.acmicpc.net

JAVA 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

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

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int[] weights = new int[N + 1];
        int[] values = new int[N + 1];

        for (int idx = 1; idx <= N; idx++) {
            st = new StringTokenizer(br.readLine());
            weights[idx] = Integer.parseInt(st.nextToken());
            values[idx] = Integer.parseInt(st.nextToken());
        } // end of input

        int[][] dp = new int[N + 1][K + 1]; // 개수, 무게
        for (int idx = 1; idx <= N; idx++) {
            for (int weight = 1; weight <= K; weight++) {
                // 무게를 초과할 경우
                if (weights[idx] > weight) {
                    dp[idx][weight] = dp[idx - 1][weight];
                }
                // 무게가 남는 경우
                else {
                    dp[idx][weight] = Math.max(dp[idx - 1][weight], dp[idx - 1][weight - weights[idx]] + values[idx]);
                }
            }
        }
        bw.write(String.valueOf(dp[N][K]));

        br.close();
        bw.flush();
        bw.close();

    }

}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유