문제
풀이
자료구조는 큐를 사용하는 문제이다. 나는 back 때문에 Queue가 아닌 LinkedList로 문제를 풀었다.
Queue는 FIFO(First In First Out) 데이터 구조의 인터페이스로, Java Collection Framework의 일부이다.
반면 LinkedList는 구체적인 클래스로, List와 Deque 인터페이스를 모두 구현한다. 여기서 Deque는 양방향 큐를 의미하며, Queue 인터페이스를 확장하고 있다.
Queue 인터페이스의 주요 메소드는 다음과 같다.
- boolean add(E e): 큐에 요소를 추가한다. 큐가 꽉 찼을 경우 예외를 던진다.
- E remove(): 큐에서 요소를 제거하고 반환한다. 큐가 비어있을 경우 예외를 던진다.
- E poll(): 큐에서 요소를 제거하고 반환한다. 큐가 비어있을 경우 null을 반환한다.
- E element(): 큐의 헤드를 반환하지만 제거하지는 않는다. 큐가 비어있을 경우 예외를 던진다.
- E peek(): 큐의 헤드를 반환하지만 제거하지는 않는다. 큐가 비어있을 경우 null을 반환한다.
LinkedList는 Queue 인터페이스의 구현체 중 하나이며, 더불어 Deque 인터페이스도 구현한다.
이를 통해 LinkedList는 양방향에서 요소를 추가하거나 제거할 수 있는 기능을 제공한다. LinkedList의 Queue 인터페이스를 통한 주요 메소드 사용은 위에서 설명한 Queue의 메소드와 동일하며, Deque의 메소드로는 끝 부분에 접근하는 addLast, removeLast, peekLast 등이 추가된다.
입력은 일단 br.readLine()으로 한 줄을 입력받는다.
String 클래스의 startsWith 메서드는 주어진 문자열이 특정 문자열로 시작하는지 여부를 확인한다. 이 메서드는 boolean 값을 반환하며, 문자열이 지정된 접두어로 시작하는 경우 true를, 그렇지 않은 경우 false를 반환한다.
그리고 String 클래스의 split 메서드를 이용했다. split(" ")[1] 로 뒤에 숫자를 받았다.
push를 구현할 때 뒤에 숫자도 입력받기 위해 사용했다.
코드
package baekjoon._18258;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
LinkedList<Integer> queue = new LinkedList<>(); // 큐 선언
for(int i = 0; i < n; i++) {
String input = br.readLine(); // 한 줄 입력받기
if (input.startsWith("push")) { // push X: 정수 X를 큐에 넣는 연산이다.
int num = Integer.parseInt(input.split(" ")[1]);
queue.offer(num);
}
else if (input.equals("pop")){ // pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if (!queue.isEmpty()) sb.append(queue.poll()).append("\n");
else sb.append(-1).append("\n");
}
else if (input.equals("size")) { // size: 큐에 들어있는 정수의 개수를 출력한다.
sb.append(queue.size()).append("\n");
}
else if (input.equals("empty")) { // empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
if (queue.isEmpty()) sb.append(1).append("\n");
else sb.append(0).append("\n");
}
else if (input.equals("front")) { // front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if (queue.isEmpty()) sb.append(-1).append("\n");
else sb.append(queue.peek()).append("\n");
}
else { // back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
if (queue.isEmpty()) sb.append(-1).append("\n");
else sb.append(queue.peekLast()).append("\n");
}
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
'Baekjoon' 카테고리의 다른 글
[백준/자바] 15828번 Router (0) | 2024.04.27 |
---|---|
[백준/자바] 15135번 Olympiad Pizza (0) | 2024.04.26 |
[백준/자바] 11899번 괄호 끼워넣기 (0) | 2024.04.14 |
[백준/자바] 1343번 폴리오미노 (0) | 2024.03.28 |
[백준/자바] 16953번 A → B (0) | 2024.03.27 |