/**
* [스택으로큐]
* 스택 두 개로 큐 하나를 구현
*
* [풀이]
* => 주어지는 자료구조 스택을 사용해도 되나요 ?
* => 들어오는 스택 & 나가는 스택을 따로 만든다.
* => 스택이 들어오면 "Reverse"시켜서 나가는 스택에 넣어준다.
*
* */
public class Q04 {
/* Main */
public static void main(String[] args) {
MyQueue mq = new MyQueue();
mq.add(1);
mq.add(2);
mq.add(3);
mq.print();
System.out.println(mq.remove()); // 1
mq.print();
mq.add(4);
System.out.println(mq.remove()); // 2
mq.print();
}
/* MyQueue */
public static class MyQueue {
// == Field ==
Stack<Integer> inputStack;
Stack<Integer> outputStack;
// == Constructor ==
public MyQueue() {
inputStack = new Stack();
outputStack = new Stack();
}
// == add ==
public void add(int a) {
inputStack.push(a);
reverseAdd();
}
// == remove ==
public Integer remove() {
if(outputStack.size() > 0) {
int temp = outputStack.pop();
reverseRemove();
return temp;
}
return null;
}
// == reverseAdd ==
public void reverseAdd() {
outputStack.clear();
for (int i = inputStack.size() - 1; i >= 0; i--) {
outputStack.push(inputStack.get(i));
}
}
// == reverseRemove ==
public void reverseRemove() {
inputStack.clear();
for (int i = outputStack.size() - 1; i >= 0; i--) {
inputStack.push(outputStack.get(i));
}
}
// == print ==
public void print() {
for (int i = 0; i < inputStack.size(); i++) {
System.out.printf(inputStack.get(i) + " ");
}
System.out.println();
for (int i = 0; i < outputStack.size(); i++) {
System.out.printf(outputStack.get(i) + " ");
}
System.out.println();
}
}
}
'CS > 자료구조 문제' 카테고리의 다른 글
문제 // 자료구조 // 문자열(String) // 순열검증 // toJava (0) | 2018.08.03 |
---|---|
문제 // 자료구조 // 문자열(String) // 중복확인 // toJava (0) | 2018.08.03 |
문제 // 자료구조 // 큐(Queue) // 병합큐 // toJava (0) | 2018.08.02 |
문제 // 자료구조 // 스택(Stack) // StackSort // toJava (0) | 2018.08.02 |
문제 // 자료구조 // 스택(Stack) // SetOfStacks // toJava (0) | 2018.08.02 |