오늘의 학습 키워드
https://www.acmicpc.net/problem/10845
백준 10845번 : 큐 - 자바
- 완주하지 못
공부한 내용 본인의 언어로 정리하기
문자답안
package backjoon.silver.lv4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class B10845 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Queue<Integer> queue = new LinkedList<>();
StringBuilder sb = new StringBuilder();
int lastElement = -1; // 마지막으로 추가된 요소를 저장
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String command = st.nextToken();
if (command.equals("push")) {
lastElement = Integer.parseInt(st.nextToken());
queue.add(lastElement);
} else {
queuePrint(command, queue, lastElement, sb);
}
}
System.out.print(sb); // 최종적으로 StringBuilder에 저장된 결과를 출력
}
public static void queuePrint(String command, Queue<Integer> queue, int lastElement, StringBuilder sb) {
switch (command) {
case "pop":
if (queue.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(queue.poll()).append("\n");
}
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "empty":
sb.append(queue.isEmpty() ? "1\n" : "0\n");
break;
case "front":
if (queue.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(queue.peek()).append("\n");
}
break;
case "back":
if (queue.isEmpty()) {
sb.append("-1\n");
} else {
sb.append(lastElement).append("\n");
}
break;
}
}
}
문제 해석
해당 문제는 자료구조 큐에 대한 문제이다. 데큐를 사용하면 맨 앞뒤 값을 구하기 쉽지만 해당 문제에서 큐를 활용하였다.
그렇기 때문에 나머지를 자바에서 제공해주는 메서드를 사용하면 되고 마지막 back에 대한 부분만 고려해주면 된다.
lastElement 사용 방식(back)
- push 시: lastElement에 새로 추가된 값을 저장
- pop, size, empty, front 등의 다른 명령어는 lastElement에 영향을 미치지 않는다.
- back 호출 시: 큐가 비어 있지 않다면 lastElement의 값을 출력합니다. 큐가 비어 있으면 -1을 출력한다.
이 문제는 위 조건만 해결한다면 쉽게 접근이 가능하다. 그러나 나 같은 경우는 큐가 빈 경우에 조건을 따로 빼서 다음과 같은 코드로 작성하였는데 size()에 대한 조건을 고려하지 못해 시간이 걸리게 되었다. 그래서 최종적으로 정답코드 처럼 수정하였다.
public static void queuePrint(String command, Queue<Integer> queue, int lastElement, StringBuilder sb) {
// 위 조건에 size에 대한 조건이 빠져 결과값이 올바르지 못함
if (queue.isEmpty()) {
if (command.equals("pop") || command.equals("front") || command.equals("back")) {
sb.append("-1\n");
} else if (command.equals("empty")) {
sb.append("1\n");
}
return;
}
switch (command) {
case "pop":
sb.append(queue.poll()).append("\n");
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "empty":
sb.append("0\n");
break;
case "front":
sb.append(queue.peek()).append("\n");
break;
case "back":
sb.append(lastElement).append("\n");
break;
}
}
오늘의 회고
큐의 기본을 확인해보는 문제였다. 큐 자료구조를 정리할 시간을 갖고 추가하면 좋을 것 같다.
이 문제는 간단하지만 오류를 찾지 못해 시간이 걸리게 되었다. 출력 코드를 잘 확인했으면 금방 찾았을 텐데 예제 출력 코드와 내 답의 출력 코드가 동일하게 생각하여 문제를 찾지 못하였다. 잘 확인해야 될 듯
'TIL' 카테고리의 다른 글
[TIL-24/11/13] 99클럽 코테 스터디 17일차 TIL 백준 25497번 : 기술 연계마스터 임스 - 자바 (1) | 2024.11.13 |
---|---|
[TIL-24/11/12] 99클럽 코테 스터디 16일차 TIL 백준 2161번 : 카드1 - 자바 (1) | 2024.11.12 |
[TIL-24/11/09] 99클럽 코테 스터디 13일차 TIL - 단어순서 뒤집기 -JAVA (1) | 2024.11.10 |
[TIL-24/11/08] 99클럽 코테 스터디 12일차 TIL - 스택(백준) -JAVA (1) | 2024.11.09 |
[TIL-24/11/07] 99클럽 코테 스터디 11일차 TIL - 완주하지 못한 선수 -JAVA (3) | 2024.11.07 |