[코딩테스트][백준] 🔥 백준 2961번 "도영이가 만든 맛있는 음식" 문제: Java로 완벽 해결하기! 🔥

김상욱·2024년 8월 14일
0
post-thumbnail

문제 링크

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

Java 풀이시간: 20분

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

// The main method must be in a class named "Main".
class Main {

    public static List<int[]> generateCombinations(int[] arr,int m){
        List<int[]> combinations=new ArrayList<int[]>();
        int[] combination=new int[m];
        generateCombination(combinations,0,0,m,arr,combination);
        
        return combinations;
    }

    public static void generateCombination(List<int[]> combinations,int start,int index,int m,int[] arr,int[] combination){
        if(index==m){
            combinations.add(combination.clone());
            return;
        }
        for(int i=start;i<arr.length;i++){
            combination[index]=arr[i];
            generateCombination(combinations,i+1,index+1,m,arr,combination);
        }
    }
    
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=i;
        }

        int[][] food=new int[n][2];
        for(int i=0;i<n;i++){
            food[i][0]=sc.nextInt();
            food[i][1]=sc.nextInt();
        }
        
        double answer=1000000000;
        for(int i=1;i<n+1;i++){
            List<int[]> combinations=generateCombinations(arr,i);
            for(int[] combination : combinations){
                double s=1;
                double b=0;
                for(int k : combination){
                    s*=food[k][0];
                    b+=food[k][1];
                }
                answer=Math.min(answer,Math.abs(s-b));
            }
        }
        System.out.println((int)answer);
        
    }
}

재료 조합으로 맛의 차이 극대화 🍋🍵

도영이가 만든 음식의 재료가 N개 있고 각 재료의 신맛 S와 쓴맛 B가 주어졌을 때 해당 재료를 적절히 섞어서 만들 수 있는 요리 중 가장 신맛과 쓴맛의 차이를 구하는 문제이다.

재료가 최대 10개이기 때문에 모든 재료의 조합을 구해내는 방법, 즉 수학적 조합을 사용해서 모든 케이스를 구해낼 수 있다. 재료의 갯수에 따라 모든 조합을 순회하면서 각 케이스에 대한 신맛과 쓴맛의 차이를 정답으로써 갱신해주면 된다.

이렇게 Java로 백준의 "도영이가 만든 맛있는 음식" 문제를 해결해보았습니다. 코드와 개념 설명을 참고하여 문제를 해결하는 데 도움이 되셨길 바랍니다! 😊

0개의 댓글