Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[문제풀이] B2961 도영이가 만든 맛있는 음식 본문
도영이가 만든 맛있는 음식
🪅 재료를 사용하고 말고의 문제를 부분집합으로 해석할 수 있는가 => 포함하는가 or 아닌가
🪅 부분집합을 구현할 수 있는가
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
/**
* 백준 2961번 도영이가 만든 맛있는 음식
* 입력:
* 첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다.
* 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은 모두 1,000,000,000보다 작은 양의 정수이다.
*
* 출력:
* 첫째 줄에 신맛과 쓴맛의 차이가 가장 작은 요리의 차이를 출력한다.
*/
public class Main {
static int[][] arr2d;
static int N;
static boolean[] isSelected;
static boolean isCheck;
static List<Integer> list = new ArrayList<>();
public static void subset(int num) {
// 종료조건
if(num == N) {
int sourPro = 1;
int bitterSum = 0;
for(int i = 0; i < N; i++) {
if(isSelected[i]) {
isCheck = true;
sourPro *= arr2d[i][0];
bitterSum += arr2d[i][1];
}
}
if(!isCheck) {
return;
}
list.add(Math.abs(sourPro-bitterSum));
return;
}
// 재귀적 확장
isSelected[num] = false;
subset(num+1);
isSelected[num] = true;
subset(num+1);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr2d = new int[N][2];
isSelected = new boolean[N];
// 재료의 개수 N만큼 신맛과 쓴맛을 입력
for(int i = 0; i < N; i++) {
StringTokenizer token = new StringTokenizer(br.readLine(), " ");
arr2d[i][0] = Integer.parseInt(token.nextToken()); // 신맛, *
arr2d[i][1] = Integer.parseInt(token.nextToken()); // 쓴맛, +
}
subset(0);
Collections.sort(list);
System.out.println(list.get(0));
}
}
💡 문제 접근 과정
결국 재료를 포함시킬 것인가, 아닌것인가의 문제이다.
요소를 포함시키고 말고의 문제는 완전탐색 중 부분집합으로 풀면 되겠다고 생각했다.
각각의 결과를 List에 넣고, 오름차순으로 정렬한 다음 가장 앞에있는 요소를 출력하는 방식으로 문제를 해결했다.
'코딩 테스트 > 문제풀이' 카테고리의 다른 글
[문제풀이] B1068 트리 (0) | 2023.04.02 |
---|---|
[문제풀이] B9742 순열 (0) | 2023.03.27 |
[문제풀이] B1759 암호만들기 (0) | 2023.03.27 |
[문제풀이] B15650 N과M (2) (0) | 2023.03.25 |
[문제풀이] B2018 수들의 합 5 (0) | 2023.03.25 |
Comments