아틴
Atin
아틴
전체 방문자
오늘
어제
  • 분류 전체보기 (460)
    • Devlopment (246)
      • 정리 글 (20)
      • MicroServices (0)
      • Reactive, Concurrenc.. (12)
      • Java (44)
      • Spring (20)
      • C,C++,Ruby,Python (52)
      • Mobile (39)
      • Web (35)
      • Tip & Info (14)
      • Unit Test (7)
    • Infra (44)
      • OS (21)
      • RDBMS (13)
      • NoSQL&Cache (5)
      • AWS (4)
    • Computer Science (11)
    • Etc (156)

블로그 메뉴

  • Home
  • Guestbook

공지사항

인기 글

태그

  • Android
  • jsp
  • CSS
  • 여행
  • C
  • 자바
  • Python
  • Ruby on Rails
  • 해킨토시
  • 정읍
  • 아이폰
  • 던젼 앤 드래곤즈
  • Java
  • javascript
  • 안드로이드
  • Linux
  • Dungeons & Dragons
  • mysql
  • TRPG
  • 전라도

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아틴

Atin

Devlopment/Java

두 개의 스택을 이용한 큐 구현

2011. 5. 31. 17:58
반응형
한번 나에게 그런 문제가 주어진 적이 있었다.
스택(Stack)을 이용하여 큐(Queue)를 구현하라.

힌트는 두 개의 스택을 이용하라.
그런데 도무지 그날따라 머리속에 로직이 떠오르지가 않는 것이었다. 로직, 알고리즘이 떠오르지 않는 날은 최선책이 잘 떠오르지 않을 때가 있다. 그래서 나는 내가 문제를 푸는 과정이 조금 미숙할 때가 있지 않은가 싶다. 체계적으로 문제의 해법에 대해 접근해가야 하는데 그렇지 못한 점이 있는 것이다.

오늘 문득 그 문제를 생각하다보니 참 간단하다. 

* 두 개의 스택을 이용한 구현
중요한 점은 쌓아진 스택을 그대로 빼서 다시 스택에 쌓으면 큐의 형태로 빼낼 수 있게 됀다.
즉, 첫 번째 스택은 push()만을 담당하고, 두 번째 스택은 pop()만을 담당한다.

- 첫 번째 스택에서 두 번째 스택으로 옮기는 것은 두 번째 스택이 비어있을 경우만 한다.
   (pop()을 할 때마다 한다면 순서가 엉망이 됀다.)
- 한번 옮기고 나면 두 번째 스택이 비기 전까지 첫 번째 스택에서 옮겨오지 않는다.
- size()는 두 개의 스택에 쌓인 수를 합친다.


import java.util.Stack;

public class AtinQueue {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public int pop(){
if(stack2.size() == 0){
while(stack1.size() > 0){
stack2.push(stack1.pop());
}
}
return stack2.pop(); 
}
public void push(int item){
stack1.push(item);
}
public int size(){
return stack1.size() + stack2.size();
}
public static void main(String[] args) {
AtinQueue queue = new AtinQueue();
queue.push(1);
queue.push(2);
System.out.println(queue.pop());
queue.push(3);
queue.push(4);
System.out.println(queue.pop());
queue.push(5);
queue.push(6);
queue.push(7);
System.out.println(queue.pop());
queue.push(8);
queue.push(9);
while(queue.size() > 0){
System.out.println(queue.pop());
}
}
}

[Source 1] AtinQueue.java


반응형

'Devlopment > Java' 카테고리의 다른 글

싱글톤 패턴(Singleton Pattern)  (0) 2011.06.10
JavaHL (JNI) Not Available  (0) 2011.06.10
Builder Pattern  (0) 2011.06.09
달팽이 & 피보나치 수열 구현  (0) 2011.06.01
JNI(Java Native Interface) - 객체  (0) 2011.06.01
JNI(Java Native Interface)  (0) 2011.05.31
System.out.println의 재정의  (0) 2011.05.13
[Linux, Window] JAVA로 로컬 IP 주소 얻어오는 방법  (0) 2011.05.09
자바 enum에서 내부 String  (0) 2011.04.08
자바 Exception의 printStackTrace 구현.  (0) 2011.04.07
    'Devlopment/Java' 카테고리의 다른 글
    • 달팽이 & 피보나치 수열 구현
    • JNI(Java Native Interface) - 객체
    • JNI(Java Native Interface)
    • System.out.println의 재정의
    아틴
    아틴

    티스토리툴바