๐Ÿ–ฅ CS/์ž๋ฃŒ๊ตฌ์กฐ

[์ž๋ฃŒ๊ตฌ์กฐ] ํ(QUEUE)

Kiwi๐Ÿ’ป 2022. 5. 17. 13:05

ํ(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()
    }
    // ๊ตฌํ˜„ ํ•„์ˆ˜ ์กฐ๊ฑด ์•„๋‹˜
}

'๐Ÿ–ฅ CS > ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์ž๋ฃŒ๊ตฌ์กฐ] LinkedList  (0) 2022.05.17