[백준] Baekjoon Online Judge
문제
오늘은 내가 팬케이크 요리사!
은주는 팬케이크를 만들기로 했다. 은주 앞에는 지금 재료들이 있다. 이 재료들을 보고 있자니, 팬케이크를 최대 몇 개나 만들 수 있을지 궁금해졌다.
팬케이크를 만들기 위해서는 먼저 반죽을 해야 한다. 우유 8컵, 계란 노른자 8개, 설탕 4스푼, 소금 1스푼, 밀가루 9컵이 있으면 팬케이크 반죽 16개를 만들 수 있다. 어떤 0 이상의 실수 x에 대해 모든 재료가 앞에 주어진 양의 x배 이상 있다면 은주는 ⌊16x⌋개의 반죽을 만들 수 있다.
그 다음 반죽에 토핑을 얹고 구우면 팬케이크가 만들어진다. 은주가 만들 수 있는 팬케이크의 종류와 각각에 필요한 토핑의 목록은 다음과 같다.
- 바나나 팬케이크: 바나나 1개
- 딸기 팬케이크: 딸기잼 30그램
- 초콜릿 팬케이크: 초콜릿 스프레드 25그램
- 호두 팬케이크: 호두 10개
바나나는 여러 조각으로 나누거나 여러 조각을 합쳐서 사용할 수 있다. 예를 들어 1/3 크기의 바나나 조각이 3개 있으면 하나로 합쳐서 바나나 팬케이크를 만들 수 있다.
은주가 가지고 있는 재료들의 양이 주어졌을 때, 만들 수 있는 팬케이크의 최대 개수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 빈 줄로 구분되며, 두 줄로 이루어져 있다.
테스트케이스의 첫째 줄에는 5개의 정수가 있다. 처음부터 차례대로 cm, y, ssu, ssa, f이다. 은주는 우유 cm컵, 계란 노른자 y개, 설탕 ssu스푼, 소금 ssa스푼, 밀가루 f컵을 가지고 있는 것이다.
두 번째 줄에는 4개의 정수가 있다. 이 수는 b, gs, gc, w이다. 은주는 바나나 b개, 딸기잼 gs그램, 초콜릿 gc그램, 호두 w개가 있다.
주어지는 모든 양은 0보다 크거나 같고, 106보다 작거나 같다.
출력
각 테스트 케이스에 대해 한 줄에 하나의 정수를 출력한다. 이 정수는 은주가 만들 수 있는 팬케이크의 최대 개수이다.
예제 입력 | 예제 출력 |
2 16 16 8 2 17 10 47 100 19 16 16 8 2 17 10 470 100 19 |
16 30 |
풀이
import java.util.Scanner;
public class Main {
static double[] needPancake = {0.5, 0.5, 0.25, 0.0625, 0.5625};
static int[] needTopping = {1, 30, 25, 10};
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int t = in.nextInt(); // 테스트 케이스
// 은주가 만들 수 있는 팬케이크의 최대 개수 구하기
for (int i = 0; i < t; i++) {
double canMake1 = 0; // 현재 재료로 만들 수 있는 팬케이크의 수
for (int j = 0; j < 5; j++) {
int n = in.nextInt();
n /= needPancake[j];
if (j == 0 || n < canMake1) canMake1 = n;
}
int canMake2 = 0; // 토핑만 봤을 때 만들 수 있는 팬케이크 수
for (int j = 0; j < 4; j++) {
int n = in.nextInt();
canMake2 += (n / needTopping[j]);
}
// 출력
System.out.println((int) Math.min(canMake1, canMake2));
}
}
}
needPancake[]에 팬케이크 1개 분량의 반죽을 만드는데 필요한 재료의 양을, needTopping[]에는 팬케이크 1개를 만드는데 필요한 토핑을 양을 미리 저장했다.
입력 받은 반죽 재료를 needPancake 값으로 나눠 그 중 가장 작은 수를 찾아 canMake1에 저장했다. 가장 양이 적은 재료를 기준으로 만들 수 있는 팬케이크 반죽의 양이 정해지기 때문이다.
입력 받은 토핑의 수도 needTopping의 값으로 나눠서 총 몇개의 팬케이크를 만들 수 있는 지 구해 canMake2에 저장했다.
팬케이크 만들기에는 반죽과 토핑이 모두 필요하기에 위에서 구한 canMake1와 canMake2 중 작은 것을 출력하면 된다.
'백준 > JAVA' 카테고리의 다른 글
[Baekjoon/JAVA] 10953번 - A+B - 6 (0) | 2023.03.02 |
---|---|
[Baekjoon/JAVA] 2522번 - 별 찍기 - 12 (0) | 2023.03.01 |
[Baekjoon/JAVA] 25703번 - 포인터 공부 (0) | 2023.02.19 |
[Baekjoon/JAVA] 25024번 - 시간과 날짜 (0) | 2023.02.18 |
[Baekjoon/JAVA] 18111번 - 마인크래프트 (0) | 2023.02.14 |