(Stack) Implement Queue using Stacks

|

https://leetcode.com/problems/implement-queue-using-stacks/

본 문제는 큐를 스택만을 사용해서 구현하는 문제이다.
스택을 여러개 사용해도 된다. 스택의 특성은 나중에 들어온것이 먼저 나가므로 큐와 반대다.
따라서 스택을 하나 더 두고, 하나씩 원소를 빼서 다른 스택에 저장하여 큐처럼 사용한다.
이때 주의해야 할 점은, pop/peek 할때 stack2가 비어있는지 검사해야 한다는 것이다.
비어있지 않을때도 pop/peek를 하게되면, 큐로 사용하는 stack2에 새로운 원소가 들어와 순서가 깨지게 된다.

class MyQueue {

    Stack<Integer> stack1;
    Stack<Integer> stack2;

    /**
     * Initialize your data structure here.
     */
    public MyQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }

    /**
     * Push element x to the back of queue.
     */
    public void push(int x) {
        stack1.push(x);
    }

    /**
     * Removes the element from in front of queue and returns that element.
     */
    public int pop() {
        if (stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }

    /**
     * Get the front element.
     */
    public int peek() {
        if (stack2.isEmpty()) {
            while (!stack1.isEmpty()) {
                stack2.push(stack1.pop());
            }
        }
        return stack2.peek();
    }

    /**
     * Returns whether the queue is empty.
     */
    public boolean empty() {
        return stack1.isEmpty() && stack2.isEmpty();
    }
}