ν(Queue)
0. μμ½
1. κ°μ
JAVA λλ νμ΄μ¬ κ°μ κ²½μ° λ΄μ₯ λΌμ΄λΈλ¬λ¦¬μ νλ₯Ό μ 곡νκ³ μμ§λ§ μλ°μ€ν¬λ¦½νΈ κ²½μ°μ κ·Έλ μ§ μλ€. κ·Έλμ μλ°μ€ν¬λ¦½νΈμμ νλ₯Ό μ¬μ©νκΈ° μν΄μλ μ§μ νλ₯Ό μμ±ν΄μΌνλ€.
μ¬μ€ μλ°μ€ν¬λ¦½νΈμμ νλ₯Ό μ¬μ©νμ§ μκ³ λ°°μ΄μ μ΄μ©νμ¬ νμ κΈ°λ₯μ μ¬μ©ν μ μλ€. Array.shift()
λ©μλμ Array.pop()
λ©μλλ₯Ό μ¬μ©νλ©΄ λλ€. νμ§λ§ μ΄λ κ² λλ©΄ μκ°λ³΅μ‘λμμ νμ ν° μ°¨μ΄λ₯Ό 보μ΄κ² λλ€. νμμμ μμ μ κ±°λ μκ°λ³΅μ‘λ O(1)λ₯Ό λ°λ₯΄κ² λλλ° λ°°μ΄μμμ Array.shift()
λ©μλλ₯Ό μ¬μ©ν μμ μ κ±°λ μκ°λ³΅μλ O(n)λ₯Ό λ°λ₯΄κ² λκΈ° λλ¬Έμ΄λ€.
Array.shift()
λ©μλμ λ΄λΆ λ‘μ§μ λ€μκ³Ό κ°λ€.
λ°°μ΄μ 첫 λ²μ§Έ μμμ μ κ·Όνμ¬ ν΄λΉ κ°μ λ°ννκ³ λ°°μ΄μμ μ κ±°
κΈ°μ‘΄ λ°°μ΄μμ 첫 λ²μ§Έ μμμ κ°μ μ¬λΌμ‘μ§λ§ 곡κ°μ μ°¨μ§νκ³ μμ
Array.shift()
λ©μλλ κ³μν΄μ 첫 λ²μ§Έ μμμ μ κ·Όν μμ λ°λΌμ λλ¨Έμ§ λ°°μ΄μ μμλ€μ μμΌλ‘ ν μΉΈμ© λΉκ²¨μ£Όλ κ³Όμ νμ
μ¦ λ§μ§λ§μ κ³Όμ μ λν μ°μ°μ΄ μΆκ°μ μΌλ‘ μꡬλλ€. μ΄λ¬ν μΆκ°μ μΈ μ°μ°μΌλ‘ μΈν΄ μ½λ© ν μ€νΈ λ¬Έμ μμ λ°μ΄ν°μ μμ΄ λ§€μ° ν° κ²½μ°, μκ° λ³΅μ‘λλ₯Ό λ§€μ° μΈμΈνκ² κ΄λ¦¬ν΄μΌ νλ κ²½μ°μλ λ°°μ΄λ‘ μ΄μ©νμ¬ λ¬Έμ λ₯Ό νκ² λλ€λ©΄ ν΅κ³Όν μ μλ κ²½μ°κ° μμ μ μλ€. μ΄λ° κ²½μ° νλ₯Ό μ΄μ©νμ¬ λ λΉ λ₯Έ μκ° λ³΅μ‘λλ‘ λ¬Έμ μ μ κ·Όνλ€λ©΄ ν΅κ³Όν μ μλ νλ₯ μ΄ μ¬λΌκ° κ²μ΄λ€.
μ°Έκ³ ν λ§ν μ½λ© ν μ€νΈ λ¬Έμ
2. νλ?
FIFO(First in, First out) μμΉμΌλ‘ λ§λ€μ΄μ§ μλ£κ΅¬μ‘°λ‘ μλ°μ€ν¬λ¦½νΈ μμ§μμ λΉλκΈ° ν¨μ μ€νμ μ½λ°±λ€μ΄ λκΈ°μ΄λ‘ λ€μ΄μ€λ Task queue
κ° λνμ μΈ μμ΄λ€.
νλ λμ΄κ³΅μμμ λ¨Όμ μ¨ μ¬λμ΄ λμ΄κΈ°κ΅¬λ₯Ό λ¨Όμ νλ κ²κ³Ό λ§μ°¬κ°μ§λ‘ λ¨Όμ λ£μ λ°μ΄ν°κ° λ¨Όμ λκ°λ€. νμ κ°μ₯ 첫 λ²μ§Έ μμλ₯Ό front
, λ μμλ₯Ό rear
λ‘ λΆλ₯΄λ©° λ°μ΄ν°μ μ κ·Όλ°©λ²μ front
μ rear
λ‘λ§ κ°λ₯νλ€. λν rear
μμλ μ½μ
μ°μ°λ§ μΌμ΄λκ³ , front
μμλ μμ μ°μ°λ§ μΌμ΄λλ€.
νμμ μ¬μ©λλ λ©μλλ μλμ κ°μ΄ μ μν μ μλ€.
dequeue:
front
λ₯Ό μ κ±°νκ³ λ°ννλ€.enqueue: νμ μμλ₯Ό μΆκ°νλ€. μ΄λ ν΄λΉ μμλ
rear
κ° λλ€.contains: ν΄λΉ μμκ° νμ μ‘΄μ¬νλμ§ νμΈνμ¬ μ‘΄μ¬νλ©΄ ν΄λΉ μμλ₯Ό λ°ννλ€.
3. μ°κ²° 리μ€νΈλ‘ ν ꡬννκΈ°
μ°κ²° 리μ€νΈλ₯Ό ν΅ν΄ νλ₯Ό ꡬννλ€.
3-1. λ
Έλμ νμ κΈ°λ³Έ ꡬ쑰
λ Έλμ νμ κΈ°λ³Έ ꡬ쑰λ μ°κ²° 리μ€νΈμμ λ€λ£¨μλ λ΄μ©κ³Ό κ°λ€.
3-2. νκ° λΉμ΄μλμ§ νμΈνκΈ°
μλ°μ€ν¬λ¦½νΈμμ μ«μ 0
μ λΆλ¦¬μΈμΌλ‘ λ³ννμ λ false
λ₯Ό κ°λ¦¬ν¨λ€. κ·Έλ κΈ° λλ¬Έμ μμ !
λ₯Ό λΆμ¬ ture
λ‘ λ°κΎΈμ΄ isEmpty
ν¨μκ° νμ μμκ° μμ κ²½μ° true
λ₯Ό λ°ννκ² νλ€.
3-3. νμ μμ μΆκ°νκΈ°
νμ μμκ° μμ κ²½μ° μλ‘κ² μμ±λ
Node
λ₯Όfornt
λ‘ μ§μ νλ€.νμ μμκ° μμ κ²½μ° κΈ°μ‘΄ νμ
rear.next
λ₯Ό μλ‘κ² μμ±λNode
λ‘ μ§μ νλ€.front
μrear
λNode
μ΄λ€. κ·Έλμ data μμ±κ³Ό next μμ±μ κ°μ§λ€.λ§μ§λ§μΌλ‘ μλ‘κ² μμ±λ
Node
λ₯Όrear
λ‘ λ°κΎΈλ©΄ λλ€.(size
λ νλ μ¬λ¦¬μ.)
3-4. νμ μμ μ κ±°νκΈ°
νμ
front
λ₯ΌfrontQueue
μ μ μ₯νλ€.νκ° λΉμ΄μλ€λ©΄ μ무κ²λ 리ν΄νμ§ μκ³ ν¨μλ₯Ό μ’ λ£νλ€.
κΈ°μ‘΄ νμ
front
λ₯Όfront.next
λ‘ μ§μ νλ€.size
λ₯Ό νλ κ°μμν¨λ€.λ§μ½
size
κ° 0μ΄ λλ©΄ νμ μμκ° μλ κ²μ΄λ―λ‘rear
λ₯Όnull
λ‘ λ°κΎΈμ΄μΌ νλ€.λ§μ§λ§μΌλ‘ νμμ μ κ±°ν μμμΈ
frontQueue
λ₯Ό λ°ννλ€.
3-5. νμ ν΄λΉ μμκ° μ‘΄μ¬νλμ§ νμΈνμ¬ μ‘΄μ¬νλ©΄ ν΄λΉ μμλ₯Ό λ°ννκΈ°
cur
λ₯Ό νμfront
λ‘ μ§μ νλ€.리ν΄νκ² λ λ³μ
node
λ₯Ό μ μΈνλ€.node
μ νμ μμκ° ν λΉλ λ κΉμ§ λ°λ³΅λ¬Έμ μ€ννλ€.λ§μ½
cur
μ΄null
μ΄λΌλ©΄ ν΄λΉ μμκ° μκΈ° λλ¬Έμ μ무κ²λ λ°ννμ§ μκ³ ν¨μλ₯Ό μ’ λ£νλ€.cur
μ΄null
μ΄ λλ€λ κ²μ νμ λͺ¨λ μμλ₯Ό νμΈνλ€λ κ²μ΄λ€.cur.data
μcontains
ν¨μμ μΈμλ‘ λ°μdata
κ° κ°λ€λ©΄node
μcur
λ₯Ό ν λΉνλ€.node
μcur
λ₯Ό ν λΉνκ² λλ©΄node
λnull
μ΄ μλκΈ° λλ¬Έμ λ°λ³΅λ¬Έμ λ μ΄μ μ€νλμ§ μλλ€.νμ§λ§ κ°μ§ μλ€λ©΄
cur
λ₯Όcur.next
λ‘ λ°κΎΈμ΄ λ°λ³΅λ¬Έμ κ³μ μ€ννλ€.
3-6. νμ λͺ¨λ μμ μΆλ ₯νκΈ°
3-7. λ°°μ΄μ λ겨 ν μμ±νκΈ°
constructor
ν¨μλ₯Ό μμ κ°μ΄ μμ νμ¬ μλ‘μ΄ νλ₯Ό λ§λ€ λarray
κ° μ λ¬λλ©΄enqueue
ν¨μκ° μ€νλκ² νλ€.Array.forEach()
λ©μλλ₯Ό μ¬μ©νμ¬ λ°°μ΄μ λͺ¨λ μμλ₯Ό νμ μμλ‘ λ£λλ€.(μμμ λΆν° μμλλ‘)
4. νμ μκ° λ³΅μ‘λ
enqueue(μΆκ°): νμ λ°μ΄ν°λ₯Ό μΆκ°νλ κ²μ νμ 맨 λ€ μμ(rear)μ νλλ₯Ό μΆκ°νλ©΄ λλ€. νμ 무μν λ§μ λ°μ΄ν°κ° μλλΌλ νλμ λ°μ΄ν° μ½μ μ ν λ²μ΄κΈ° λλ¬Έμ μκ° λ³΅μ‘λλ O(1)μ΄ λλ€.
dequeue(μμ ): FIFOμ λ°λΌ λ°μ΄ν°κ° μμ λ λ νμ 맨 μ μμ(front)κ° μμ λλ κ²μ΄λ―λ‘ νμ ν¬κΈ°μ μκ΄μμ΄ μκ° λ³΅μ‘λλ O(1)λ₯Ό κ°μ§κ² λλ€.
contains(μ κ·Όκ³Ό κ²μ): νμ 첫 λ²μ§Έ μμμ μ κ·Όμ μκ°λ³΅μ‘λ O(1)λ₯Ό κ°μ§λ€. νμ§λ§ νμ μμ μ κ·Όμ νμ 맨 μ μμ(front)μμλ§ κ°λ₯νκΈ° λλ¬Έμ nλ²μ§Έ μμμ μ κ·Όμ 첫 λ²μ§Έ μμ(front)λΆν° μννλ―λ‘ μκ° λ³΅μ‘λλ O(n)λ₯Ό κ°μ§κ² λλ€.
ν (Queue)
O(1)
O(1)
O(1)
O(n)
O(n)
5. Conclusion
νλ₯Ό μλ°μ€ν¬λ¦½νΈλ‘ ꡬν ν΄λ³΄λ©΄μ μ΄λ€ μλ£κ΅¬μ‘°μΈμ§ 곡λΆν΄λ³΄μλ€. νμ€ν λ°°μ΄κ³Όλ λ€λ₯Έ νΉμ§μ΄ μλ€. μμμ μΆκ°, μμ λ λΉ λ₯΄μ§λ§ μμμ μ κ·Ό, κ²μμ λ리기 λλ¬Έμ μν©μ λ§λ νμν μλ£κ΅¬μ‘°λ₯Ό μ μ νμ ν΄μΌκ² λ€. μ΄μ μ μ½λ© ν μ€νΈ 곡λΆλ₯Ό νλ©΄μ νμλ λ¬Έμ λ₯Ό μ‘°κΈ μμ νμλ€. κ·Έ μ΄μ λ κ·Έ λ λ¨μν λΈλ‘κ·Έμ μλ ν μμ±νλ ν΄λμ€λ₯Ό 볡μ¬λΆμ¬ λ£κΈ°λ₯Ό νκΈ° λλ¬Έμ΄λ€. λ΄κ° μ€μ€λ‘ λ§λ (λ¬Όλ‘ λΈλ‘κ·Έμ νμ λΉλ¦°κΈ΄ νμ§λ§..) ν ν΄λμ€λ₯Ό μ¬μ©νκ³ λ¬Έμ λ μ ν΅κ³Όλλ κ²μ 보λ μ¬λ°κ³ λΏλ―νλ€.
μ°Έκ³
[μλ£κ΅¬μ‘°] JSλ‘ κ΅¬ννλ ν (Queue) [μκ³ λ¦¬μ¦, μλ£κ΅¬μ‘°] μλ°μ€ν¬λ¦½νΈλ‘ ν(Queue)ꡬννκΈ° (+κ°λ μ΄ν΄)
π 2022-09-02
Last updated