빠에야는 개발중

스택 두 개로 큐 만들기 본문

공부/알고리즘 문제

스택 두 개로 큐 만들기

빠에야좋아 2018. 1. 27. 04:08

모 회사 입사 코딩 테스트에도 나왔던 문제이다. 기본적인 자료구조 활용이라 심플하고도 중요하고, 또 재미있는 문제라고 생각한다.


아이디어

기본 아이디어는 스택 두 개를 하나는 enqueue 전용, 하나는 dequeue 전용으로 두는 것이다.


enqueue 되는 값은 무조건 1번 스택에 push 한다.


dequeue를 할 때는 2번 스택이 비었는지 체크하여 


1. 비지 않았다면 그대로 2번 스택에서 pop 한다.


2. 비어있다면 1번 스택의 모든 요소를 pop하여 2번 스택에 차례로 push한다. 이렇게 하면 1번 스택에 있었던 요소들이 역순으로 2번 스택에 들어간다. 그 후에 pop 하면 된다.


코드

스택을 직접 구현하는 것도 좋지만, 좋은 라이브러리가 있기 때문에 감사히 사용했다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.Stack;
 
class Queue {
    private Stack<Integer> stack1 = new Stack<>();
    private Stack<Integer> stack2 = new Stack<>();
 
    public void enqueue(Integer num) {
        stack1.push(num);
    }
 
    public int dequeue() {
        if (!stack2.isEmpty()) {
            return stack2.pop();
        } else {
            while(stack1.size() > 0) {
                stack2.push(stack1.pop());
            }
            return stack2.pop();
        }
    }
    
    public int size() {
        return stack1.size() + stack2.size();
    }
}
 
public class TwoStackToQueue {
    public static void main(String[] args) {
        Queue q = new Queue();
        q.enqueue(1);
        q.enqueue(2);
        q.enqueue(3);
        
        while(q.size() > 0) {
            System.out.print(q.dequeue() + " ");
        }
    }
}
cs


'공부 > 알고리즘 문제' 카테고리의 다른 글

문자열 내림차순으로 배치하기  (0) 2018.02.16
물통  (0) 2018.02.16
별 찍기를 하다가 발견한 멋진 풀이  (0) 2018.02.10
날짜 계산  (0) 2018.02.08
다중 조건 정렬  (4) 2018.02.06
Comments