[BOJ/백준] 15406번 : Check the Check (Java)
📘 백준 15406번 : Check the Check
🔤 문제 번역
문제
파리에서 관광 중인 당신은, 식사가 끝난 뒤 제시되는 계산서(itemized bill, check)를 항상 주문한 음식 목록과 총 금액을 꼼꼼히 확인하라는 말을 들었습니다. 실제로 계산서는 손글씨로 작성되는 경우가 많고, 총합도 종업원이 손으로 계산하는 경우가 적지 않습니다.
당신은 식사비를 과하게 지불하고 싶지 않기 때문에, 식당 측에 유리한 실수가 있다면 항의할 것입니다. 하지만 식당이 할인해 준 경우라면 굳이 항의하지 않을 것입니다.
제시된 계산서의 총액을 그대로 지불해야 할지, 아니면 항의해야 할지를 판단하는 프로그램을 작성하세요.
입력
입력은 총 2n + 2개의 줄로 구성됩니다.
2k + 1번째 줄 (0 ≤ k ≤ n − 1): 주문한 음식의 이름 dk
2k + 2번째 줄 (0 ≤ k ≤ n − 1): 해당 음식 dk의 가격 pk(유로)와 주문 수량 ck (공백으로 구분)
2n + 1번째 줄: 문자열 “TOTAL”
2n + 2번째 줄: 종업원이 계산한 총 금액 T (유로)
- 제한 조건
각 0 ≤ k ≤ n − 1에 대해:
dk의 길이는 최대 1000자이며, “TOTAL”과 동일하지 않음
0 ≤ pk ≤ 1000
0 ≤ ck ≤ 10
0 ≤ n ≤ 100000
T ≤ 2,000,000,000
출력
출력은 한 줄로 구성됩니다.
계산서에 표시된 총액이 실제 합계 이하라면 “PAY” 출력
계산서에 표시된 총액이 실제 합계보다 크다면 “PROTEST” 출력
💡 문제 풀이
“TOTAL”이 입력되기 전까지 메뉴의 (음식 가격) * (주문 수량)의 합을 저장한 후,
“TOTAL”이 입력되면 그 금액과 위에서 계산한 금액을 비교한 후 출력
✅ 코드 (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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// https://www.acmicpc.net/problem/15406
public class B15406_Check_the_Check {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean pay = true; // 그대로 지불할지 말지(true: 지불)
int realCost = 0; // 실제 금액
while (true) {
String s = br.readLine();
if (s.equals("TOTAL")) { // 계산서 마지막
int payCost = Integer.parseInt(br.readLine()); // 제시된 계산서 금액
if (realCost < payCost) { // 실제 금액보다 계산서 금액이 더 크면 항의(지불 x)
pay = false;
}
break;
} else {
StringTokenizer st = new StringTokenizer(br.readLine());
int pk = Integer.parseInt(st.nextToken()); // 음식 가격
int ck = Integer.parseInt(st.nextToken()); // 주문 수량
realCost += pk * ck; // 실제 금액에 더하기
}
}
System.out.println(pay ? "PAY" : "PROTEST"); // 출력
br.close();
}
}