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<>();
int N = Integer.parseInt(br.readLine());
StringTokenizer command;
while(N-- > 0) {
command = new StringTokenizer(br.readLine(), " ");
switch(command.nextToken()) {
case "push_front":
q.offerFirst(Integer.parseInt(command.nextToken()));
break;
case "push_back":
q.offerLast(Integer.parseInt(command.nextToken()));
break;
case "pop_front" :
Integer item1 = q.pollFirst();
if(item1 == null) {
sb.append(-1).append('\n');
}
else {
sb.append(item1).append('\n');
}
break;
case "pop_back" :
Integer item2 = q.pollLast();
if(item2 == null) {
sb.append(-1).append('\n');
}
else {
sb.append(item2).append('\n');
}
break;
case "size":
sb.append(q.size()).append('\n');
break;
case "empty":
if(q.isEmpty()) {
sb.append(1).append('\n');
}
else {
sb.append(0).append('\n');
}
break;
case "front":
Integer ite = q.peek();
if(ite == null) {
sb.append(-1).append('\n');
}
else {
sb.append(ite).append('\n');
}
break;
case "back":
Integer it = q.peekLast();
if(it == null) {
sb.append(-1).append('\n');
}
else {
sb.append(it).append('\n');
}
break;
}
}
System.out.println(sb);
}
}
Deque Method
addFirst()
: 덱의 앞에 element삽입. 용량을 초과하게 되면 예외 발생
addLast()
: 덱의 뒤에 element삽입. 용량 초과하게 되면 예외 발생
add()
: addLast()와 같음
offerLast()
: 덱의 마지막에 element삽입. 성공적으로 삽입된 경우 true 반환
removeFirst()
: 덱의 앞에서 element를 하나 뽑아서 제거한 후 return
덱이 empty면, 예외 발생
pollFirst()
: 덱의 앞에서 element를 하나 뽑아서 제거한 후 return
덱이 empty면 null return
removeLast()
: 덱의 뒤에서 element를 하나 뽑아서 제거한 후 reuturn
덱이 empty면, 예외 발생
pollLast()
: 덱의 뒤에서 elment를 하나 뽑아서 제거한 후 return
댁이 empty면, null return
remove()
: removeFirst()와 동일
poll()
: pollFirst()와 동일
getFirst()
:
peekFirst()
getLast()
peekLast()
peek()