[BOJ/백준] 33631번 : 1교시: 가정 (Java)
📘 백준 33631번 : 1교시: 가정
💡 문제 풀이
초기 재료 수량, 쿠키 1개당 필요한 재료 수량을 배열에 입력.
쿼리 수 입력 후 반복 처리.
쿼리 유형에 따라 조건 분기.
쿼리 번호 1: 만들 수 있는 쿠키 수 판단 및 재료 차감.
쿼리 번호 2~5: 해당 재료를 추가하고 결과 출력.
✅ 코드 (Java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// https://www.acmicpc.net/problem/33631
// 배열 s는 현재 재료 상태, 배열 n은 쿠키 1개당 필요한 재료 양을 저장
// 쿼리 번호 1번: 쿠키를 만들 수 있는지 재료별 최소 가능 수량으로 판단하고, 만들 수 있으면 최소 수량만큼 재료 차감 및 만든 쿠키 개수 증가
// 쿼리 번호 2~5: 각각 밀가루, 초콜릿, 달걀, 버터를 추가하는 동작으로 index를 맞춰 값을 더하고 출력
public class B33631_1교시_가정 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st = new StringTokenizer(br.readLine());
int[] s = new int[4]; // 현재 가지고 있는 재료 배열: 밀가루, 초콜릿, 달걀, 버터
for (int i = 0; i < 4; i++) { // s[] 입력
s[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int[] n = new int[4]; // 쿠키 1개 만들 때 필요한 재료 배열
for (int i = 0; i < 4; i++) { // n[] 입력
n[i] = Integer.parseInt(st.nextToken());
}
int Q = Integer.parseInt(br.readLine()); // 쿼리 수
int cookie = 0; // 현재까지 만든 쿠키 수
for (int i = 0; i < Q; i++) {
st = new StringTokenizer(br.readLine());
int no = Integer.parseInt(st.nextToken()); // 쿼리 번호
int amount = Integer.parseInt(st.nextToken()); // 쿼리 대상 양
if (no == 1) { // 쿠키 만들기 쿼리인 경우
int min = Integer.MAX_VALUE; // 만들 수 있는 최대 쿠키 수
for (int j = 0; j < 4; j++) { // 각 재료별로 가능한 수량의 최솟값 계산
min = Math.min(s[j] / n[j], min);
}
if (min >= amount) { // 요청한 수량만큼 만들 수 있는 경우
cookie += amount; // 누적 쿠키 개수 증가
for (int j = 0; j < 4; j++) { // 재료 차감
s[j] -= n[j] * amount;
}
sb.append(cookie); // 결과에 현재 쿠키 개수 출력 저장
} else {
sb.append("Hello, siumii"); // 재료 부족 시 메시지 출력 저장
}
} else {
s[no - 2] += amount; // no: 2~5 → 밀가루~버터 → 인덱스는 no - 2
sb.append(s[no - 2]); // 현재 재료 양 출력 저장
}
sb.append("\n");
}
System.out.println(sb); // 출력
br.close();
}
}