class MyQueue {
Stack<Integer> queue = new Stack<>();
Stack<Integer> temp = new Stack<>();
public MyQueue() {
}
public void push(int x) {
while(!queue.isEmpty()){
temp.push(queue.pop());
}
queue.push(x);
while(!temp.isEmpty()){
queue.push(temp.pop());
}
}
public int pop() {
return queue.pop();
}
public int peek() {
return queue.peek();
}
public boolean empty() {
return queue.empty();
}
}
두 가지 stack 을 이용하는데 실제적인 queue로 생각하는 stack과 이를 반대로 바꾸어줄 임시적인 저장공간인 stack 을 이용한다.
push 를 할 때마다 stack 을 queue 처럼 정렬해주기 위해 queue에 있던 모든 수들을 pop하는 순서대로 temp에 임시적으로 저장해두었다가, 추가할 값을 queue에 추가하고 저장해두었던 temp의 값들을 다시 queue에 추가해준다. push 에 이 작업을 해준다면 peek, pop, empty 때는 queue 처럼 작업된다.