Q5: μ€ν(Stack)κ³Ό ν(Queue)
μ§λ¬Έ: μ€νκ³Ό νμ λμ μ리λ₯Ό LIFO/FIFO κ΄μ μμ μ€λͺ
νκ³ , μκ° λ³΅μ‘λμ μ€λ¬΄ νμ© μ¬λ‘λ₯Ό μ€λͺ
νμΈμ.
| μ©μ΄ |
μ€λͺ
|
| Stack |
LIFO(Last In First Out) β νμ
μ μΆ μλ£κ΅¬μ‘° |
| Queue |
FIFO(First In First Out) β μ μ
μ μΆ μλ£κ΅¬μ‘° |
| Push/Pop |
μ€νμ μ½μ
/μμ μ°μ° |
| Enqueue/Dequeue |
νμ μ½μ
/μμ μ°μ° |
| Call Stack |
ν¨μ νΈμΆ μ 보λ₯Ό μ μ₯νλ μ€ν ꡬ쑰 |
| Priority Queue |
μ°μ μμ κΈ°λ° ν (HeapμΌλ‘ ꡬν) |
βββββββββββ
β TOP β β Push / Pop
βββββββββββ€
β 5 β (λ§μ§λ§ μ½μ
, κ°μ₯ λ¨Όμ μ κ±°)
βββββββββββ€
β 3 β
βββββββββββ€
β 2 β (첫 μ½μ
, κ°μ₯ λμ€μ μ κ±°)
βββββββββββ
BOTTOM
μ°μ° λ° μκ° λ³΅μ‘λ
| μ°μ° |
μ€λͺ
|
μκ° λ³΅μ‘λ |
push(item) |
μ€ν μλ¨μ μΆκ° |
O(1) |
pop() |
μλ¨ μμ μ κ±° λ° λ°ν |
O(1) |
peek() |
μλ¨ μμ νμΈ (μ κ±° X) |
O(1) |
isEmpty() |
λΉμ΄μλμ§ νμΈ |
O(1) |
| μ¬λ‘ |
μ€λͺ
|
| ν¨μ νΈμΆ μ€ν (Call Stack) |
μ¬κ· νΈμΆ μ κ° ν¨μ νλ μμ μ€νμΌλ‘ κ΄λ¦¬ |
| DFS (κΉμ΄ μ°μ νμ) |
νμν λ
Έλλ₯Ό μ€νμ μ μ₯νμ¬ κ°μ₯ κΉμ κ²½λ‘ λ¨Όμ νμ |
| κ΄νΈ μ ν¨μ± κ²μ¬ |
μ¬λ κ΄νΈλ₯Ό push, λ«λ κ΄νΈ λ§λ λ popνμ¬ λ§€μΉ νμΈ |
| Undo/Redo |
μμ
μ΄λ ₯μ μ€νμΌλ‘ κ΄λ¦¬ |
Front Rear
β β
βββββββ β βββββββ β βββββββ β βββββββ
β 2 β β 7 β β 3 β β 5 β
βββββββ βββββββ βββββββ βββββββ
Dequeue Enqueue
μ°μ° λ° μκ° λ³΅μ‘λ
| μ°μ° |
μ€λͺ
|
μκ° λ³΅μ‘λ |
enqueue(item) |
ν λ€μͺ½μ μΆκ° |
O(1) |
dequeue() |
μμͺ½ μμ μ κ±° λ° λ°ν |
O(1) |
peek() |
μμͺ½ μμ νμΈ (μ κ±° X) |
O(1) |
isEmpty() |
λΉμ΄μλμ§ νμΈ |
O(1) |
| μ¬λ‘ |
μ€λͺ
|
| BFS (λλΉ μ°μ νμ) |
νμν λ
Έλλ₯Ό νμ μ μ₯νμ¬ λ 벨 μμλ‘ νμ |
| μμ
μ€μΌμ€λ§ |
OS νλ‘μΈμ€ μ€μΌμ€λ¬, νλ¦°ν° μ€νλ¬ |
| λ©μμ§ ν |
Kafka, RabbitMQ β Producer/Consumer ν¨ν΄ |
| μ΄λ²€νΈ μ²λ¦¬ |
JavaScript μ΄λ²€νΈ 루νμ Task Queue |
| νλͺ© |
Stack |
Queue |
| μ리 |
LIFO |
FIFO |
| μ½μ
μμΉ |
Top |
Rear |
| μμ μμΉ |
Top |
Front |
| νμ μκ³ λ¦¬μ¦ |
DFS |
BFS |
| μ£Όμ νμ© |
ν¨μ νΈμΆ, Undo, κ΄νΈ κ²μ¬ |
μ€μΌμ€λ§, λ©μμ§ ν, μ΄λ²€νΈ μ²λ¦¬ |
μ°μ μμ ν (Priority Queue)
μΌλ° νμ λ¬λ¦¬ μ°μ μμκ° λμ νλͺ©μ΄ λ¨Όμ μ²λ¦¬λ¨. Heap μλ£κ΅¬μ‘°λ‘ ꡬν.
| μ°μ° |
μκ° λ³΅μ‘λ |
enqueue |
O(log n) |
dequeue |
O(log n) |
peek |
O(1) |
νμ©: Dijkstra μ΅λ¨ κ²½λ‘, μμ
μ€μΌμ€λ§, μ΄λ²€νΈ λλ¦¬λΈ μμ€ν