์คํ๊ณผ ํ๋ ์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- Stack
- ๋์ค์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค.
- LIFO(Last in First Out)์ ๊ตฌ์กฐ.
- ์๋๋ก์ด๋์ ์กํฐ๋นํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์คํ์ด ์ฌ์ฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ์ธ์ ์ฌ์ฉ? ํจ์์ ์ฝ ์คํ, ๋ฌธ์์ด ์ญ์ ์ถ๋ ฅ, ์ฐ์ฐ์ ํ์ ํ๊ธฐ๋ฒ ๋ฑ
- Queue
- ๋จผ์ ๋ค์ด๊ฐ ์์๊ฐ ๋จผ์ ๋์ค๋ ๊ตฌ์กฐ์ด๋ค.
- FIFO(First in First out)์ ๊ตฌ์กฐ.
- ํ๋ ํ์ฉ ๋ถ์ผ๊ฐ ๋๊ฒ ๋ง๋ค. ์๋๋ก์ด๋์ ๊ฒฝ์ฐ, ๋ฃจํผ์ ๋ฉ์์ง ํ๊ฐ ์์ ์ค ํ๋์ด๋ค.
- ์๊ฐ ๋ณต์ก๋ : O(n)
- ๊ณต๊ฐ ๋ณต์ก๋ : O(n)
- ์ธ์ ์ฌ์ฉ? ๋ฒํผ, ๋ง๊ตฌ ์ ๋ ฅ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ๋ชปํ๊ณ ์๋ ์ํฉ, bfs ํ์ ๋ฑ
๊ฐ๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ฉด์ ์์ ๋์จ๋ค๊ณ ํ๋ค. ์ด๋ ต๋ค๊ณ ์๊ฐํ๋๋ฐ, ๊ทธ๋ฆฌ ์ด๋ ต์ง ์๊ณ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.
- inbox์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค(push) -> A,B
- inbox์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ(pop)ํ์ฌ outbox์ ์ฝ์ (push) ํ๋ค. -> B,A
- outbox์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถ(pop)ํ๋ค. -> A,B ์์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ฆ, inbox ์คํ์ A,B ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ฉด ์์ ๊ทธ๋ฆผ์ฒ๋ผ ์คํ์ ๋ฐ์ดํฐ๊ฐ ์์ธ๋ค. ๊ทธ๋ฆฌ๊ณ inbox ์คํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ popํด์ outbox๋ก ์ฎ๊ธด๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด outbox์๋ B,A ์์๋ก ๋ฐ์ดํฐ๊ฐ ์์ธ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ outbox ์คํ์ ์๋ ๋ฐ์ดํฐ๋ฅผ popํ๊ฒ ๋๋ฉด A,B ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ๋๋ค.
[Code]
package Stack;
import java.util.Stack;
/**
* created by victory_woo on 2020/05/06
* Stack 2๊ฐ๋ฅผ ์ด์ฉํด์ Queue ๊ตฌํํ๊ธฐ.
*/
public class StackWithQueue {
public static void main(String[] args) {
StackQueue<String> queue = new StackQueue<>();
queue.enQueue("A");
queue.enQueue("B");
queue.enQueue("C");
System.out.println(queue.deQueue());
System.out.println(queue.deQueue());
System.out.println(queue.deQueue());
}
static class StackQueue<T> {
private Stack<T> inBox;
private Stack<T> outBox;
StackQueue() {
inBox = new Stack<>();
outBox = new Stack<>();
}
void enQueue(T item) {
inBox.push(item);
}
Object deQueue() {
if (outBox.isEmpty()) {
while (!inBox.isEmpty()) {
outBox.push(inBox.pop());
}
}
return outBox.pop();
}
}
}
์์ ๋ด์ฉ์ Creator Developer ๋์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
TODO
TODO