#큐 #Queue #ArrayDeque #LinkedList #PriorityQueue
백준 실버4) 큐
큐 클래스에 있는 메서드 기능들을 알면 그리 어려운 문제는 아니었다.
스택 문제와 비슷하게 풀어냈다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
ArrayDeque<Integer> queue = new ArrayDeque<>();
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
switch(st.nextToken()) {
case "push":
queue.offer(Integer.parseInt(st.nextToken()));
break;
case "pop":
sb.append(queue.isEmpty() ? -1 : queue.poll()).append("\n");
break;
case "size":
sb.append(queue.size()).append("\n");
break;
case "empty":
sb.append(queue.isEmpty() ? 1 : 0).append("\n");
break;
case "front":
sb.append(queue.isEmpty() ? -1 : queue.getFirst()).append("\n");
break;
case "back":
sb.append(queue.isEmpty() ? -1 : queue.getLast()).append("\n");
break;
default:
break;
}
}
System.out.println(sb);
br.close();
}
}
add() 와 offer() 는 값을 추가하는 기능을 가지고 있다.
그런데 같은 기능을 두 개 가지고 있을 필요가 있을까?
둘의 차이를 알아보기로 했다.
두 메서드는 새로운 요소를 추가하는 역할을 하지만 동작 방식이 다르다.
가장 큰 차이점은 예외(Exception) 발생 여부에 있다.
세 클래스 모두 Queue 인터페이스를 구현한 클래스들이지만 내부 동작 방식과 사용 목적이 다르다.