Search
Duplicate
🎮

Stack And Queue

Stack 두 개로 Queue 한 개

하나의 stack에는 enqueue, 나머지 하나의 stack은 dequeue를 구현한다.
enqueue
public void enqueue(int value) { stack1.push(value); }
Java
복사
instackpush()한다.
dequeue
public int dequeue() { if (stack2.isEmpty()) { while (!stack1.isEmpty()) { stack2.push(stack1.pop()); } } return stack2.pop(); }
Java
복사
outsatck이 비어있을 경우, instack의 모든 요소를 pop()outstackpush()한다.
outstack.pop()을 하게 되면 가장 먼저 왔던 데이터가 가장 먼저 출력된다.
비어있지 않을 경우, 그냥 출력하면 된다.

Queue 두 개로 Stack 한 개

하나의 queue에는 push, 하나의 queue는 pop을 구현한다.
push
public void push(int value) { queue1.add(value); }
Java
복사
q1으로 enqueue하여 데이터를 저장
pop
public int pop() { if (queue1.isEmpty()) { throw new IllegalStateException("Stack is empty"); } while (queue1.size() > 1) { queue2.add(queue1.remove()); } int value = (int) queue1.remove(); Queue temp = queue1; queue1 = queue2; queue2 = temp; return value; }
Java
복사
1.
queue1에 저장된 데이터의 갯수가 1개일 때까지 dequeue를 한 뒤, 추출된 데이터를 queue2에 추가한다.
2.
결과적으로 queue1에는 가장 마지막에 삽입된 데이터만 남게 되고 이를 dequeue()해서 가장 최근에 저장한 데이터를 반환할 수 있다.
3.
다음에 발생할 pop 연산을 위해 queue1queue2swap해준다.