Stack 1 : add() 할 때만 사용할 것입니다. (추가할 때만 사용)
Stack 2 : peek(), poll() 을 할 때 사용할 것입니다. (읽는 연산이 필요할 때 사용)
1번 스택에 원소를 넣는다.
만약 2번 스택이 비어있지 않다면 1번 과정을 생략한다.
2번 스택이 비어있지 않은 상태로 1번 과정을 진행하면 원소들의 순서가 뒤죽박죽으로 섞일 수 있다.
두 스택에 있는 원소들의 합을 반환합니다.
import java.util.Stack;
public class Queue<T> {
Stack<T> stack1 = new Stack<>();
Stack<T> stack2 = new Stack<>();
private void moveIfAbsent() {
if (stack2.size() == 0)
while (stack1.size() != 0)
stack2.add(stack1.pop());
}
public void add(T t) {
stack1.add(t);
}
public T peek() {
moveIfAbsent();
return stack2.peek();
}
public T poll() {
moveIfAbsent();
return stack2.pop();
}
public int size() {
return stack1.size() + stack2.size();
}
}