2개의 Stack 자료구조를 이용하여 Queue의 구현이 가능하다.
Enqueue: 원소를 stack1에 Push
Dequeue: Stack2가 비어있다면 Stack1에서 원소들을 Pop하여, stack2에 Push한 뒤 Stack2에서 원소를 Pop
Stack2가 비어있지 않다면, Stack2에서 그대로 원소를 Pop
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class QueueUsingStack{ // define 2 stacks for implementing queue private Stack stack1 = new Stack(); private Stack stack2 = new Stack(); // Enque - push the element in stack1 public void enque(int element) stack1.push(element); // Dequeue - pop the element from stack2 // and pop the element from stack1 public E deque(){ if(stack2.isEmpty()) { while(!stack1.isEmpty()) stack2.push(stack1.pop()); } return stack2.pop(); } } | cs |
* 시간 복잡도:
- Enque: 집어 넣고자 하는 element를 그대로 Push하기 때문에 O(1)
- Deque: Stack2가 비어있을 경우, Stack1에 들어가 있는 원소의 개수만큼 Stack2로 옮겨야 하기 때문에 O(N)
-> 결과적으로 O(N)의 시간 복잡도를 지니는 자료구조
cf. Enque 당시 바로 Stack1에서 Stack2에 옮기는 방식으로 FIFO의 구조를 갖추고(O(N)의 시간복잡도), Deque 때 FIFO의 순서가 갖춰진 자료를 꺼내어 O(1)의 시간 복잡도를 지니게 할 수도 있음. 결과적으로 같은 구조 !
'Software Convergence > Algorithm' 카테고리의 다른 글
2017 카카오 신입 공채 1차 코딩 테스트 <다트 게임> (0) | 2018.07.12 |
---|---|
2017 카카오 신입 공채 1차 코딩 테스트 <비밀 지도> (0) | 2018.07.11 |
정렬 알고리즘(Sorting Algorithm) (0) | 2018.01.17 |
[무식하게 풀기: Brute-Force] (0) | 2018.01.11 |
[알고리즘의 시간 복잡도 분석] (0) | 2018.01.11 |