[μλ£κ΅¬μ‘°] ν(QUEUE)
ν(Queue)λ?
μλΈμ¨μ΄μ μλμμΉλ₯Ό μ¬λ €κ³ μ¬λλ€μ΄ μ€μ μκ³ μλ€. μ΄λ μ΄ μ¬λλ€μ΄ μμλ μ€μ μμ΄λ‘ λλΌ ννν κΉ? λ°λ‘ ν(queue) μ΄λ€.
5λͺ μ μ¬λμ΄ μλμμΉλ₯Ό μ¬λ €κ³ κΈ°λ€λ¦¬κ³ μλ€κ³ κ°μ ν λ, μλμμΉλ₯Ό κ°μ₯ λ¨Όμ μ΄ μ μλ μ¬λμ ν(queue) μ 맨 μ (front) 첫λ²μ§Έ μ¬λμΌ κ²μ΄κ³ , λ§μ§λ§μΌλ‘ μλμμΉλ₯Ό ꡬ맀 ν μ μλ μ¬λμ κ°μ₯ λ¦κ² μ¨ 5λ²μ§Έ μ¬λμΌ κ²μ΄λ€. λν κ΅¬λ§€κ° λλ 첫λ²μ§Έ μ¬λμ μλμμΉλ₯Ό λ€κ³ ν(queue) λ₯Ό λ²μ΄λ κ²μ΄κ³ , λ§μ½ μλ‘μ΄ μ¬λμ΄ μλμμΉλ₯Ό ꡬ맀νλ € μλ€λ©΄ λ§μ§λ§ λ€μ―λ²μ§Έ μ¬λ λ€ (rear) μ μ€μ μμΌ ν κ²μ΄λ€.
Queue μμ μ΄ κ²½μ°μ κ°μ μ μ μ μΆ(First in, First Out)λ°©μμ μλ£κ΅¬μ‘°λΌκ³ ν μ μλ€.
νμ νΉμ§
μ μμμμ μΈκΈν λ°μ κ°μ΄ μλμμΉλ₯Ό ꡬ맀ν ν μ¬λλ€μ΄ λΉ μ Έλκ°λ κ³³μ νμ 맨 μμ΄ λκ³ , μλ‘μ΄ μ¬λμ΄ μ€μ μλ κ³³μ νμ 맨 λ€κ° λλ€. λν κ°μ₯ λ§μ§λ§μ μ¨ μ¬λμ΄ νμ 맨μμ μ€ μκ° μκ³ , κ°μ₯ λμ€μ μ€μ μ μ¬λμ΄ μμ μ¬λλ€μ 무μνλ©΄μ ꡬ맀λ₯Ό λ¨Όμ νκ³ νλ₯Ό λΉ μ Έ λκ° μλ μλ€.
μ΄μ²λΌ queueμμλ νμͺ½ λμμλ μμ μμ λ§ μ΄λ£¨μ΄μ§λ©°, λ€λ₯Έμͺ½ λμμλ μ½μ μμ λ§μ΄ μ΄λ£¨μ΄μ§λ€. λν μμκ° λ€μ΄μ¨ μμλλ‘ νλ₯Ό λΉ μ Έλκ°κ² λλ€.
μ΄λ μμ μ°μ°λ§μ΄ μ΄λ£¨μ΄ μ§λ κ³³μ νλ‘ νΈ(front: μ€μ 맨 μ)λΌκ³ νλ©°, μ½μ μ°μ°λ§ μ΄λ£¨μ΄μ§λ κ³³μ 리μ΄(rear: μ€μ 맨 λ€)λΌκ³ νλ€. λμκ° νμ 리μ΄μμ μ΄λ£¨μ΄μ§λ μ½μ μ°μ°μ μΈν(enQueue: μ¬λλ€μ΄ μ€μ μλ κ²), νλ‘ νΈμμ μ΄λ£¨μ΄μ§λ μμ μ°μ°μ λν(deQueue: μ¬λλ€μ΄ μ€μ λΉ μ Έ λκ°λ κ²)λΌκ³ νλ€.
Swiftμμ ν ꡬννκΈ° (Array κΈ°λ°)
struct CalculatorItemQueue<T> {
private var queue: [T] = []
// μ¬λλ€μ΄ μ μλ μ€μ λ§ν¨
mutating func enqueue(data: T) {
list.append(data)
}
// μλμμΉλ₯Ό μ¬λ¬ μ¨ μ¬λμ΄ λ§¨ λ€μ μ€μ μλ κ²
mutating func dequeue() -> T? {
list.removeFirst()
}
// μλμμΉλ₯Ό ꡬ맀 μλ£ν 맨 μμ μ¬λμ μ€μ λ λλ κ²
mutating func removeAll() {
list.removeAll()
}
// ꡬν νμ 쑰건 μλ
}