μ€νμ κ°λ
μ€ν(Stack)μ΄λ νμͺ½ λμμλ§ μλ£λ₯Ό μΆκ°(μ½μ ), μμ (μ κ±°)νλ μμ μ΄ μ΄λ£¨μ΄μ§λ μλ£κ΅¬μ‘°λ€. λ§μ§λ§μ μ½μ λ λ°μ΄ν°κ° κ°μ₯ λ¨Όμ μ κ±°(LIFO, Last In First Out)λλ ꡬ쑰λ₯Ό κ°λλ€.
μ€νμ μ£Όμ μ°μ°
- push: μ€νμ 맨 μμ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°
- pop: μ€νμ 맨 μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νλ μ°μ°
- peek/top: μ€νμ 맨 μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ³ νμΈνλ μ°μ°
- isEmpty: μ€νμ΄ λΉμ΄ μλμ§ νμΈνλ μ°μ°
μ€νμ μ₯μ κ³Ό λ¨μ
μ₯μ
- μλ£κ΅¬μ‘° μ€ κ΅¬νμ΄ λ§€μ° κ°λ¨ν νΈμΌλ‘, λ°°μ΄μ΄λ μ°κ²° 리μ€νΈλ₯Ό ν΅ν΄ μ½κ² ꡬνν μ μλ€.
- ν¨μ νΈμΆ μ€ν, μ¬κ· νΈμΆ, λ°±νΈλνΉ λ±μμ λ§€μ° μ μ©νκ² μ¬μ©λμ΄ λ©λͺ¨λ¦¬ κ΄λ¦¬μ μ μ©νλ€.
λ¨μ
- μ€νμ LIFO λ°©μμΌλ‘ λμνλ―λ‘ μ€κ°μ μλ λ°μ΄ν°μ μ κ·ΌνκΈ° μ΄λ ΅λ€.
- λ°°μ΄ κΈ°λ° μ€νμ κ²½μ° ν¬κΈ°κ° κ³ μ λμ΄ μμ΄ μ€λ²νλ‘μ°κ° λ°μν μ μλ€.
- μ°κ²° 리μ€νΈ κΈ°λ°μΌλ‘ ν΄κ²°ν μ μμ§λ§, λ©λͺ¨λ¦¬ μ€λ²ν€λκ° λ°μνλ€.
μ€νμ μ¬μ© μ¬λ‘
- μμ°¨μ μΈ λ°μ΄ν°λ₯Ό νμ
μ μΆ λ°©μμΌλ‘ μ²λ¦¬ν΄μΌ νλ κ²½μ°
- νμ νκΈ°μ κ³μ° λλ λ°±νΈλνΉ μκ³ λ¦¬μ¦μμ μμκ° μ€μν κ²½μ°
- μ¬κ·μ μΈ μ°μ°μ΄ νμν κ²½μ°
- DFS(κΉμ΄ μ°μ νμ)μμ κ²½μ° νμ μ
- κ·Έλνλ νΈλ¦¬μμ νΉμ κ²½λ‘λ‘ κΉμ΄ λ€μ΄κ°λ μμ μ΄ λ§μ λ
- ν μͺ½ λμμλ§ μΆκ°, μμ μ°μ°μ΄ λΉλ²ν κ²½μ°
- λ§€λͺ¨λ¦¬λ νλ‘κ·Έλ¨ νλ¦μ μΆμ νλ κ²½μ°
- μΉ λΈλΌμ°μ μ λ€λ‘ κ°κΈ°/μμΌλ‘ κ°κΈ°, undo κΈ°λ₯ λ± κ΅¬ν
νμ κ°λ
ν(Queue)λ μμͺ½ λμμ κ°κ° μλ£λ₯Ό μΆκ°(μ½μ )μ μμ (μ κ±°)νλ μμ μ΄ μ΄λ£¨μ΄μ§λ μλ£κ΅¬μ‘°λ€. λ¨Όμ μ½μ λ λ°μ΄ν°κ° κ°μ λ¨Όμ μ κ±°(FIFO, First In First Out)λλ ꡬ쑰λ₯Ό κ°λλ€. μ½μ μ νμͺ½ λ(λ€)μμ μ΄λ£¨μ΄μ§λ©°, μμ λ λ°λμͺ½ λ(μ)μμ μ΄λ£¨μ΄μ§λ€.
μν ν
μν ν(Circular Queue) λ νμ νμ₯λ ννλ‘, λ°°μ΄μ μ²μκ³Ό λμ΄ μ°κ²°λ μν ꡬ쑰λ₯Ό κ°λλ€. μΌλ°μ μΈ νμ λ¬λ¦¬, λ°μ΄ν°κ° κ°λ μ°Όμ λλ λΉμ΄μλ 곡κ°μ μ¬νμ©ν μ μμ΄ λ°°μ΄μ ν¬κΈ°λ₯Ό ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€. μ½μ κ³Ό μμ λ FIFO μμΉμ λ°λ₯΄λ©°, ν¬μΈν°κ° λ°°μ΄μ λμ λλ¬νλ©΄ λ€μ μ²μμΌλ‘ λμκ°μ μννλ€.
νμ μ£Όμ μ°μ°
- enqueue: νμ λ€μ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°
- dequeue: νμ μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νλ μ°μ°
- peek/front: νμ μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ³ νμΈνλ μ°μ°
- isEmpty: νκ° λΉμ΄ μλμ§ νμΈνλ μ°μ°
νμ μ₯μ κ³Ό λ¨μ
μ₯μ
- νλ FIFO λ°©μμΌλ‘, λ¨Όμ μ λ ₯λ λ°μ΄ν°κ° λ¨Όμ μ²λ¦¬λμ΄ μμ°¨μ μΈ μμ μ²λ¦¬μ μ 리νλ€.
- μ¬λ¬ κ°μ μμ°μμ μλΉμκ° λμμ μμ μ μννλ μν©μμ μ μ©νλ©°, λΉλκΈ°μ μΈ λ°μ΄ν° μ²λ¦¬μ μ ν©νλ€.
λ¨μ
- νλ μ€κ°μ μλ λ°μ΄ν°μ μμ μ κ·Όμ΄ λΆκ°λ₯νμ¬, μ€κ° λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² κ²μνλ λ°μλ λΉν¨μ¨μ μ΄λ€.
- λ°°μ΄ κΈ°λ° νμ κ²½μ° ν¬κΈ°κ° κ³ μ λμ΄ μμ΄, κ³΅κ° λλΉκ° λ°μνκ±°λ μ΄κ³Όν λ μ€λ²νλ‘μ°κ° λ°μν μ μλ€.
- μν νλ‘ κ³΅κ° λλΉ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ§λ§, ꡬνμ΄ λ³΅μ‘ν΄μ§ μ μλ€.
νμ μ¬μ© μ¬λ‘
- μμ°¨μ μΈ λ°μ΄ν°λ₯Ό λ¨Όμ μ
λ ₯λ μμλλ‘ μ²λ¦¬ν΄μΌ νλ κ²½μ°
- λ©ν°νμ€νΉ μ΄μ체μ μμ μμ μ€μΌμ€λ§μ΄λ νλ‘μΈμ€ κ΄λ¦¬μ μ¬μ©
- λ€νΈμν¬ ν¨ν· μ²λ¦¬ λλ νλ¦°ν° μμ λκΈ°μ΄μ²λΌ μ λ ₯λ μμκ° μ€μν μμ€ν μμ μ¬μ©
- BFS(λλΉ μ°μ νμ)μ κ°μ μκ³ λ¦¬μ¦μμ λ Έλλ₯Ό μμ°¨μ μΌλ‘ νμν λ
- μμ°μ-μλΉμ ν¨ν΄μμ μμ°μκ° λ°μ΄ν°λ₯Ό μ λ ₯νκ³ μλΉμκ° λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κ²½μ°
μμ°μ-μλΉμ ν¨ν΄
λ©ν°μ€λ λ©μμ μμ£Ό μ¬μ©λλ λμμΈ ν¨ν΄μΌλ‘, μμ°μ(Producer)μ μλΉμ(Consumer)λΌλ λ μν μ΄ νΉμ μμμ 곡μ νλ©° λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ ꡬ쑰λ₯Ό μλ―Ένλ€. μμ°μλ λ°μ΄ν°λ₯Ό μμ±νμ¬ νκ°μ μλ£κ΅¬μ‘°μ μ μ₯νκ³ , μλΉμλ νμμ λ°μ΄ν°λ₯Ό κΊΌλ΄ μ²λ¦¬νλ€. μμ°μ-μλΉμ ν¨ν΄μ μ£Όμ λͺ©μ μ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νλ κ²μΌλ‘, νΉν μ¬λ¬ μ€λ λκ° λμμ λ°μ΄ν°λ₯Ό λ€λ£° λ λ°μνλ μΆ©λμ λ°©μ§νλ λ° μ μ©νλ€.
λ±μ κ°λ
λ±(Deque, Double-Ended Queue)μ΄λ, μμͺ½ λμμ λͺ¨λ μλ£μ μΆκ°(μ½μ )μ μμ (μ κ±°) μμ μ΄ μ΄λ£¨μ΄μ§ μ μλ μλ£κ΅¬μ‘°λ€. μ€νκ³Ό νμ νΉμ±μ λͺ¨λ κ°μΆκ³ μμ΄, λ°μ΄ν°λ₯Ό μκ³Ό λ€μμ λͺ¨λ μ½μ νκ³ μμ ν μ μλ μ μ°ν ꡬ쑰λ₯Ό μ 곡νλ€. μ½μ κ³Ό μμ λ μλ°©ν₯μμ μ΄λ£¨μ΄μ§λ©° LIFO λλ FIFO λ°©μ λͺ¨λλ₯Ό μ§μνλ€.
μν λ±
μν λ±(Circular Deque)μ΄λ λ±μ νμ₯λ ννλ‘, λ°°μ΄μ μ²μκ³Ό λμ΄ μ°κ²°λ μν ꡬ쑰λ₯Ό κ°λ μλ£κ΅¬μ‘°λ€. μ½μ κ³Ό μμ λ μμͺ½ λμμ λͺ¨λ κ°λ₯νλ©°, μν νμ λ§μ°¬κ°μ§λ‘ μ½μ κ³Ό μμ μ°μ°μ΄ μ΄λ£¨μ΄μ§ λ ν¬μΈν°κ° λ°°μ΄μ λμ λλ¬νλ©΄ λ€μ μ²μμΌλ‘ μννλ€. μ΄λ‘ μΈν΄ λ©λͺ¨λ¦¬ 곡κ°μ λ³΄λ€ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μμΌλ©°, λ±μ νΉμ±μ μ μ§νλ©΄μ λ°°μ΄μ κ³ μ λ ν¬κΈ° λ¬Έμ λ₯Ό ν΄κ²°νλ€.
λ±μ μ£Όμ μ°μ°
- addFirst: λ±μ μμ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°.
- addLast: λ±μ λ€μ λ°μ΄ν°λ₯Ό μΆκ°νλ μ°μ°.
- removeFirst: λ±μ μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νλ μ°μ°.
- removeLast: λ±μ λ€μ μλ λ°μ΄ν°λ₯Ό μ κ±°νλ μ°μ°.
- peekFirst: λ±μ μμ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ³ νμΈνλ μ°μ°.
- peekLast: λ±μ λ€μ μλ λ°μ΄ν°λ₯Ό μ κ±°νμ§ μκ³ νμΈνλ μ°μ°.
- isEmpty: λ±μ΄ λΉμ΄ μλμ§ νμΈνλ μ°μ°.
λ±μ μ₯μ κ³Ό λ¨μ
μ₯μ
- μλ°©ν₯μμ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μμ΄, μ€νκ³Ό νμ μ₯μ μ λͺ¨λ νμ©ν μ μλ€.
- FIFO λλ LIFO λ°©μμ λͺ¨λ μ§μνμ¬, λ°μ΄ν°μ μ²λ¦¬ μμλ₯Ό μ μ°νκ² μ‘°μ ν μ μλ€.
λ¨μ
- λ±μ μ€κ°μ μλ λ°μ΄ν°λ₯Ό κ²μνκ±°λ μ κ·Όν λ O(n)μ μκ°μ΄ μμλλ―λ‘, μ€κ° λ°μ΄ν°μ λν μμ μ κ·Όμ λΉν¨μ¨μ μ΄λ€.
- μ°κ²° 리μ€νΈ κΈ°λ° λ±μ μΆκ°μ μΈ λ©λͺ¨λ¦¬ μ€λ²ν€λκ° λ°μνλ€.
- ꡬνμ΄ νλ μ€νλ³΄λ€ λ³΅μ‘ν μ μμΌλ©°, μν λ±μ ꡬνν κ²½μ° μΆκ°μ μΈ ν¬μΈν° κ΄λ¦¬κ° νμνλ€.
λ±μ μ¬μ© μ¬λ‘
- μμͺ½ λμμ μ½μ
κ³Ό μμ κ° λΉλ²ν κ²½μ°
- μλ°©ν₯ νλ‘μ μκ³Ό λ€μμ λ°μ΄ν° μ²λ¦¬κ° νμν κ²½μ°
- μ¬λΌμ΄λ© μλμ° μκ³ λ¦¬μ¦ μ²λΌ μλ€λ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬ν΄μΌ νλκ²½μ°
- μΊμ μμ€ν μμ μμ£Ό μ¬μ©λλ LRU(Least Recently Used) μκ³ λ¦¬μ¦μ ꡬνν λ
- νλ¬Έ κ²μ¬ λ±μμ μλ€ λ°μ΄ν°λ₯Ό λμμ λΉκ΅νλ κ²½μ°
- BFSμμ μλ°©ν₯ νμμ μ§ννκ±°λ μ΅μ λΉμ© κ²½λ‘ νμμ ꡬνν λ
LRU(Least Recently Used) μκ³ λ¦¬μ¦
LRU μκ³ λ¦¬μ¦μ μΊμ κ΅μ²΄ μκ³ λ¦¬μ¦ μ€ νλλ‘, μΊμμ μ μ₯ν μ μλ λ°μ΄ν°μ μμ΄ μ νλμ΄ μμ λ, κ°μ₯ μ€λ«λμ μ¬μ©λμ§ μμ λ°μ΄ν°λ₯Ό λ¨Όμ μ κ±°νλ λ°©μμΌλ‘ λμνλ€. μΊμλ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ μ₯νκ³ μ½μ΄μ€λ μμ μ μ₯μμΈλ°, μ©λμ΄ νμ λμ΄ μκΈ° λλ¬Έμ λͺ¨λ λ°μ΄ν°λ₯Ό κ³μ 보κ΄ν μ μλ€. LRU μκ³ λ¦¬μ¦μ μΊμκ° κ°λ μ°Όμ λ κ°μ₯ μ΅κ·Όμ μ¬μ©λμ§ μμ λ°μ΄ν°λ₯Ό μ κ±°νκ³ μλ‘μ΄ λ°μ΄ν°λ₯Ό μΊμμ μ μ₯νλ λ°©λ²μ μ 곡νλ€.
λ±μ μμͺ½ λμμ μ½μ κ³Ό μμ κ° κ°λ₯νκΈ° λλ¬Έμ, LRUμμλ μ΅κ·Όμ μ¬μ©λ λ°μ΄ν°λ₯Ό μμͺ½μ λκ³ , κ°μ₯ μ€λ«λμ μ¬μ©λμ§ μμ λ°μ΄ν°λ₯Ό λ€μͺ½μ λλ©΄ μ½κ² κ΄λ¦¬ν μ μλ€.
μ€ν vs ν vs λ±
μ€ν (Stack) | ν (Queue) | λ± (Deque) | |
λ°μ΄ν° μ½μ /μμ | νμͺ½ λμμλ§ (LIFO) |
μ½μ
: λ€, μμ : μ (FIFO) |
μμͺ½ λ λͺ¨λ κ°λ₯ (LIFO/FIFO) |
μκ° λ³΅μ‘λ (μ½μ /μμ ) | O(1) | O(1) | O(1) |
λ°μ΄ν° μ κ·Ό λ°©μ | LIFO (Last In, First Out) |
FIFO (First In, First Out) |
LIFO λ° FIFO λͺ¨λ μ§μ |
μ€κ° λ°μ΄ν° μ κ·Ό | λΉν¨μ¨μ (O(n)) | λΉν¨μ¨μ (O(n)) | λΉν¨μ¨μ (O(n)) |
μ¬μ© μ¬λ‘ | μ¬κ·, ν¨μ νΈμΆ, DFS | μμ λκΈ°μ΄, BFS, νλ‘μΈμ€ μ€μΌμ€λ§ | μ¬λΌμ΄λ© μλμ°, LRU μΊμ |
ꡬν λμ΄λ | κ°λ¨ | κ°λ¨ | μλμ μΌλ‘ λ³΅μ‘ |
λ©λͺ¨λ¦¬ ꡬ쑰 | λ°°μ΄ λλ μ°κ²° 리μ€νΈ | λ°°μ΄ λλ μ°κ²° 리μ€νΈ | λ°°μ΄ λλ μ°κ²° 리μ€νΈ |
μ₯μ | κ°λ¨ν ꡬν, λ©λͺ¨λ¦¬ κ΄λ¦¬ μ μ© | 곡μ ν μ²λ¦¬, μμ°¨μ λ°μ΄ν° κ΄λ¦¬ | μμͺ½ λμμ μ μ°ν μ²λ¦¬ κ°λ₯ |
λ¨μ | μ€κ° λ°μ΄ν° μ κ·Ό λΉν¨μ¨ | μ€κ° λ°μ΄ν° μ κ·Ό λΉν¨μ¨ | ꡬν 볡μ‘μ±, λ©λͺ¨λ¦¬ μ€λ²ν€λ |