알고리즘 문제/JAVA

[SWEA]5215번:햄버거 다이어트(JAVA)

공백._. 2023. 4. 7. 15:22

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWT-lPB6dHUDFAVT 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


  • 풀이방법[알고리즘]

각 재료의 맛 점수 합을 더해가면서  제한 칼로리를 넘지않는 최대 합을 구한다. dfs를 사용하여, 순서대로 맛 점수를 더해 최대 칼로리보다 작으면서 가장 큰 값이 나오는 경우를 계산한다. 해당 재료를 넣었을 때와 넣지 않은 경우의 수를 각각 계산하여 maxScore를 리턴하면 끝!

import java.util.*;
import java.io.*;

public class Main{
	static int[][] food;
    static int maxScore;
    static int maxCal;
	public static void main(String[]args) throws NumberFormatException, IOException{
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int tc = Integer.parseInt(br.readLine());
        for(int k=1;k<=tc;k++){
            String[] NL  = br.readLine().split(" ");
            maxCal = Integer.parseInt(NL[1]);
            //맛 점수와 칼로리를 넣을 배열 생성
            food = new int[Integer.parseInt(NL[0])][2];
            for(int i=0;i<Integer.parseInt(NL[0]);i++){
                String[]str = br.readLine().split(" ");
                food[i][0] = Integer.parseInt(str[0]);
                food[i][1] = Integer.parseInt(str[1]);
            }

            calculate(0,0,0);
            System.out.println("#"+k+" "+maxScore);
		}//tc
	}//main
	static void calculate(int idx, int score, int cal){
    	if(cal>maxcal){
        	return
        }else if(score>maxScore){
        	maxScore = score;
        }
        if(idx==food.length)return;
        
       calculate(idx+1,score+food[idx][0],cal+food[idx][1]);
       calculate(idx+1,score,cal);
    }
}//class