메모
/*
해당 명령어들은 '큐'를 기준으로 함
push X : 정수X 넣기
pop : 가장 앞의 정수 빼서 출력 (단, 정수가 없다면 -1 출력)
size : 정수 개수 출력
empty : 비어 있으면 1, 아니면 0 출력
front : 가장 앞의 정수 출력 (단, 정수가 없다면 -1 출력)
back : 가장 뒤의 정수 출력 (단, 정수가 없다면 -1 출력)
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Deque;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Deque<Integer> q = new LinkedList<>(); // LinkedList 선언
int N = Integer.parseInt(br.readLine()); // 형 변환
StringTokenizer command; // 데이터 가공을 위해 선언 (BuffredReader 中)
while (N-- > 0) {
command = new StringTokenizer(br.readLine(), " "); // 문자열 분리
switch (command.nextToken()) {
case "push": // offer : 큐의 맨 뒤에 요소를 추가
q.offer(Integer.parseInt(command.nextToken()));
break;
case "pop" : // poll : 가장 앞에 있는 요소를 삭제 (단, 삭제할 원소가 없을 경우 예외를 던지는 것이 아닌 null을 반환)
Integer item = q.poll();
if (item == null) {
sb.append(-1).append('\n');
} else {
sb.append(item).append('\n');
}
break;
case "size": // 정수 개수 출력
sb.append(q.size()).append('\n');
break;
case "empty": // 비어 있으면 1, 아니면 0 출력
if(q.isEmpty()) {
sb.append(1).append('\n');
} else {
sb.append(0).append('\n');
}
break;
case "front": // peek() : 큐에 꺼낼 요소가 없을 경우 null을 반환
Integer ite = q.peek();
if (ite == null) {
sb.append(-1).append('\n');
} else {
sb.append(ite).append('\n');
}
break;
case "back": // peekLast() : 큐에 꺼낼 요소가 없을 경우 null을 반환
Integer it = q.peekLast();
if(it == null) {
sb.append(-1).append('\n');
} else {
sb.append(it).append('\n');
}
break;
}
}
}
System.out.println(sb);
}
}
큐(Queue), 덱(Deque)
Queue<Integer> q = new LinkedList<>();
Queue<Integer> q = new ArrayDeque<>();
에서Queue<Integer> q
처럼) 뒤의 원소를 꺼내올 수 있는 방법이 없다.)참고: 자바 컬렉션 (Java Collection, 컬렉션 프레임워크)
참고: LIFO (후입선출), 호출 스택, FIFO (선입선출)
BufferedReader
StringBuilder : 문자열을 다룬다
LinkedList 라이브러리 이용한 방법
Deque<Integer> q = new LinkedList<>();
와 LinkedList<Integer> q = new LinkedList<>();
모두 사용 가능하다