백준 26582 java : 배낭문제, DP

magicdrill·2024년 11월 28일

백준 문제풀이

목록 보기
496/673

백준 26582 java : 배낭문제, DP

일반적인 배낭문제와 동일하다.

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

public class bj26582 {
    static Scanner scanner = new Scanner(System.in);
    static int[][] dataSet;
    static int W;

    public static void main(String[] args) {
        int n, i, W;

        n = scanner.nextInt();
        for(i = 0; i < n; i++){
            System.out.println("테스트케이스 " + (i+1) + "번");
            inputData();
            System.out.println(findAnswer());
        }

        scanner.close();
    }

    public static void inputData(){
        System.out.println("inputData()");
        int i, j;
        int I;

        I = scanner.nextInt();
        W = scanner.nextInt();
        System.out.println("W : " + W);
        dataSet = new int[I][2];
        for(i = 0;i < I; i++){
            dataSet[i][0] = scanner.nextInt();
            dataSet[i][1] = scanner.nextInt();
        }
    }

    public static int findAnswer(){
        System.out.println("findAnswer()");
        int i, j;
        int I = dataSet.length;
        int [][] DP = new int[I + 1][W + 1];
        int currentItemValue, currentItemWeight;

        for(i = 0; i <= I; i++){
            Arrays.fill(DP[i], 0);
        }
        for(i = 1; i <= I; i++){
            currentItemValue = dataSet[i - 1][0];
            currentItemWeight = dataSet[i - 1][1];
            for(j = 1; j <= W; j++){
                if(j - currentItemWeight >= 0){
                    DP[i][j] = Math.max(DP[i - 1][j], DP[i-1][j - currentItemWeight] + currentItemValue);
                }
                else{
                    DP[i][j] = DP[i - 1][j];
                }
            }

            System.out.println(i + "회 순회");
            for(int k = 1; k <= I; k++){
                for(int l = 1; l <= W; l++){
                    System.out.print(DP[k][l] + " ");
                }
                System.out.println();
            }
            System.out.println();
        }

        return DP[I][W];
    }
}

0개의 댓글