class MyStack {
Queue<Integer> queue = new LinkedList<>();
public MyStack() {
}
public void push(int x) {
queue.add(x);
}
public int pop() {
int size = queue.size();
for(int i = 0 ; i < size-1; i++){
queue.add(queue.poll());
}
int value = queue.poll();
return value;
}
public int top() {
int size = queue.size();
for(int i = 0 ; i < size-1; i++){
queue.add(queue.poll());
}
int value = queue.poll();
queue.add(value);
return value;
}
public boolean empty() {
return queue.isEmpty();
}
}
거꾸로 생각하면 되는데, pop과 top에서 반복되는 것들이 많기 때문에 stack을 이용해 queue를 구현하는 것처럼 push에서 한 작업만 하면 pop,top에서 한 줄 코드로 값을 반환할 수 있다.
따라서 queue는 앞에서만 poll 혹은 remove 를 할 수 있으므로 stack처럼 구현이 되기 위해서는 거꾸로 pushf를 해주어야 한다.
class MyStack {
Queue<Integer> queue = new LinkedList<>();
public MyStack() {
}
public void push(int x) {
queue.add(x);
for(int i = 0 ; i < queue.size()-1 ; i++){
queue.add(queue.poll());
}
//이미 추가해준 값 빼고 원래 기존에 들어있던 값만 pop하고 다시 push
}
public int pop() {
return queue.poll();
}
public int top() {
return queue.peek();
}
public boolean empty() {
return queue.isEmpty();
}
}