728x90
반응형
오늘의 학습 키워드
- 큐(Queue)
오늘의 회고
1. 문제
2. 해결 방안
import java.io.*;
import java.util.*;
/**
* [구름] LV2. 체크 카드 (큐)
*/
public class CheckCard {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int balance = Integer.parseInt(input[0]); // 최종 출력할 잔액
int historySize = Integer.parseInt(input[1]);
List<String[]> history = new ArrayList<>();
for (int i = 0; i < historySize; i++) {
history.add(br.readLine().split(" "));
}
// 대기열
Queue<Integer> q = new LinkedList<>();
for (int i = 0; i < historySize; i++) {
String label = history.get(i)[0];
int money = Integer.parseInt(history.get(i)[1]);
if ("deposit".equals(label)) {
balance += money;
// 입금 후 바로 대기 목록 작업
while (!q.isEmpty() && q.peek() <= balance) {
balance -= q.poll();
}
} else if ("pay".equals(label)) {
if (balance >= money) {
balance -= money;
}
} else { // reservation
if(!q.isEmpty() || balance < money) { // 대기열이 비어있지 않거나, 잔액보다 머니가 크면 대기열에 넣기
q.add(money);
}else {
balance -= money;
}
}
}
System.out.println(balance);
}
}
- 큐로 예약 상태에 대한 대기열을 만들어서 순차적으로 상태를 처리하게 한다.
- 각 if 문으로 조건을 나눠 로직처리를 하면 된다.
- deposit 에서 입금 처리 후 바로 대기 목록 작업을 수행시킨다. 큐에 값이 있고 잔액과 큐 값을 비교해 출금 처리가 가능하다면 큐를 빼고 잔액을 업데이트 시키는 것을 반복한다.
- pay 에서는 잔액을 뺄 수 있을 경우만 뺀다.
- reservation 에서는 두가지를 고려해야 한다. 1) 잔액 출금 안되거나 2) 대기열에 값이 하나라도 존재한다면 무조건 대기열에 넣는다. 1,2 해당되지 않는다면 잔액 출금 처리.
3. 피드백
- 잘못 했던 부분
- 대기 목록 작업 돌리는 부분(while문)을 for문 초반(if문 전)과 최종 출력 전에 한번 더 돌렸었다.(총 2번) 현재처럼 deposit 조건문 하단에서 바로 돌리면 되었다.
- reservation 조건문에서 대기열이 비어있지 않는 경우도 조건으로 주는 것도 놓쳤었다. (reservation 요구사항을 미충족 했음)
- 다 푼줄 알았는데 수정 전에는 테케 3개 통과를 못했었다. 요구사항 놓치지 않고 잘 보자.
728x90
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘/Goorm] LV2. 블록 게임 (Java) (0) | 2024.07.18 |
---|---|
[알고리즘/Goorm] LV2. 0커플 (Java) (0) | 2024.07.18 |
[알고리즘/Goorm] LV2. 카드 모으기 (Java) (0) | 2024.07.18 |
[알고리즘/Goorm] LV2. 대체 경로 (Java) (0) | 2024.07.18 |
[알고리즘/Programmers] LV2. 모음사전 (Java) (0) | 2024.07.16 |