-
[백준] 2964번 : 도영이가 만든 맛있는 음식 - 자바 (JAVA)알고리즘/백준 2022. 3. 21. 00:01
https://www.acmicpc.net/problem/2961
문제 해석
N개의 재료가 있고 각 재료는 신맛 S과 쓴맛 B가 존재한다.
여러 재료를 이용해서 요리할 때, 그 음식의 신맛은 재료의 신맛의 곳이고 쓴맛은 합이다.
시거나 쓴 음식을 좋아하는 사람은 많지 않기 때문에 신맛과 쓴맛의 차이를 작게 만드려고 한다.
재료는 적어도 하나 사용해야 한다.
문제 풀이 전 설계
부분집합 (조합을 사용해서 해결)
곱셈을 하며 숫자의 범위가 커질 수 있기 때문에 long사용
신맛과 쓴맛을 다루어야 하기 때문에 Material Class를 통하여 관리
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; class Material { int sourTaste; int saltyTaste; } public class Main_2961_도영이가만든맛있는음식 { static Material[] mList; static long min = Integer.MAX_VALUE; public static void main(String[] args) throws NumberFormatException, IOException { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); mList = new Material[N]; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine(), " "); mList[i] = new Material(); mList[i].sourTaste = Integer.parseInt(st.nextToken()); mList[i].saltyTaste = Integer.parseInt(st.nextToken()); } for (int i = 1; i <= mList.length; i++) { combination(i, 0, 1, 0, 0); } System.out.println(min); } private static void combination(int N, int cnt, int sourTaste, int salfyTaste, int start) { if (cnt == N) { long currentGap = Math.abs(sourTaste - salfyTaste); min = min < currentGap ? min : currentGap; return; } for (int i = start; i < mList.length; i++) { combination(N, cnt + 1, sourTaste * mList[i].sourTaste, (salfyTaste + mList[i].saltyTaste), i + 1); } } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 3040번 : 백설 공주와 일곱 난쟁이 - 자바(JAVA) (0) 2022.03.22 [백준] 2089번 : 외판원순회 - 자바(JAVA) (0) 2022.03.21 [백준] 5639 : 이진 검색 트리 - 자바(JAVA) (0) 2022.03.18 [백준] 1753 : 최단경로 - 자바(JAVA) (0) 2022.03.17 [백준] 1238번 : 파티 - 자바(JAVA) (0) 2022.03.17