Notice
Recent Posts
Link
- Today
- Total
hye-log
[백준]2961번 도영이가 만든 맛있는 음식(JAVA) 본문
0. 문제 링크
https://www.acmicpc.net/problem/2961
2961번: 도영이가 만든 맛있는 음식
첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은
www.acmicpc.net
1. 문제 설명
1) N개의 재료 중 신맛 S의 곱과 쓴맛 B의 차이가 작은 요리의 차이 출력하기
2. 입출력
// input
4
1 7
2 6
3 8
4 9
// output
1
3. 코드
import java.util.*;
public class b2961 {
static int N;
static int[][] taste;
static boolean[] selected;
static int ans;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt(); // 재료의 개수
taste = new int[N][2]; // 맛 배열
selected = new boolean[N]; // 선택 여부
ans = Integer.MAX_VALUE; // 정답
for(int n = 0; n < N; n++) {
taste[n][0] = sc.nextInt(); // 신맛의 곱
taste[n][1] = sc.nextInt(); // 쓴맛의 합
}
recursive(0, 0);
System.out.println(ans); // 출력
}
private static void recursive(int cnt, int sel) {
// basis part
if(cnt == N) {
if(sel == 0) { // 고른게 없으면 종료
return;
}
int mul = 1; // 곱
int sum = 0; // 합
for(int n = 0; n < N; n++) {
if(selected[n]) { // 선택되었으면
mul *= taste[n][0]; // 신맛은 곱하고
sum += taste[n][1]; // 쓴맛은 더하고
}
}
ans = Math.min(ans, Math.abs(mul-sum)); // ans와 신맛의 곱과 쓴맛의 합 중 min 구하기
return;
}
// inductive part
selected[cnt] = true;
recursive(cnt+1, sel+1);
selected[cnt] = false;
recursive(cnt+1, sel);
}
}
실행 결과
4. 회고
1) 재귀를 이용하여 구현
5. Github
https://github.com/iihye/Algorithm/blob/main/Baekjoon/b2961.java
728x90
'CodingTest > Baekjoon' 카테고리의 다른 글
[백준]2023번 신기한 소수(JAVA) (0) | 2023.08.06 |
---|---|
[백준]12891번 DNA 비밀번호(JAVA) + 슬라이딩 윈도우 GIF (0) | 2023.08.06 |
[백준]1244번 스위치 켜고 끄기(JAVA) (0) | 2023.08.06 |
[백준]11660번 구간 합 구하기 5(JAVA) (0) | 2023.08.06 |
[백준]11659번 구간 합 구하기 4(JAVA) (0) | 2023.08.06 |
Comments