๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swfit] ํ(Queue) ๊ตฌํ˜„ํ•˜๊ธฐ

by hyebin (Helia) 2024. 9. 27.
๋ฐ˜์‘ํ˜•

Queue๋ฅผ ๊ตฌ์กฐ์ฒด์™€ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•ด Queue ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

struct Queue<T> {
    private var queue: [T] = []
    
    var isEmpty: Bool {
        return queue.isEmpty
    }
    
    var count: Int {
        return queue.count
    }
    
    var peek: T? {
    	return queue.first
    }
    
    mutating func enqueue(_ element: T) {
        queue.append(element)
    }
    
    mutating func dequeue() -> T? {
        return isEmpty ? nil : queue.removeFirst()
    }    
}

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” Queue์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. enqueue(_:): ํ์˜ ๋’ค์— ์ƒˆ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค.
  2. dequeue(): ํ์˜ ์•ž์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด nil์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์„ ์•ž์œผ๋กœ ์ด๋™์‹œ์ผœ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.
  3. peek: ํ์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋˜, ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค.
  4. isEmpty: ํ๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค.
  5. count: ํ์— ์žˆ๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•œ Queue๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var intQueue = Queue<Int>()
intQueue.enqueue(1)
intQueue.enqueue(2)
intQueue.enqueue(3)

print(intQueue.dequeue() ?? 0)  // ์ถœ๋ ฅ: 1
print(intQueue.peek ?? 0)     	// ์ถœ๋ ฅ: 2
print(intQueue.count)           // ์ถœ๋ ฅ: 2
print(intQueue.isEmpty)         // ์ถœ๋ ฅ: false

 

 

 

๋ฐ˜์‘ํ˜•