Queue

queue

  • ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํ˜•์‹์˜ ์ž๋ฃŒ๊ตฌ์กฐ

  • ์„ ์ž…์„ ์ถœ, FIFO, first in first out

  • ์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๋ชจ๋‘ ๋šซ๋ ค์žˆ๋Š” ํ„ฐ๋„๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‹œ๊ฐํ™”

    • ์˜ˆ) ์€ํ–‰๋Œ€๊ธฐ์ค„

  • ํ•œ ์ชฝ ๋์€ front๋กœ ์ •ํ•˜์—ฌ ์‚ญ์ œ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค. -> enqueue

  • ๋‹ค๋ฅธ ์ชฝ ๋์€ rear๋กœ ์ •ํ•˜์—ฌ ์‚ฝ์ž… ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰ํ•œ๋‹ค. -> dequeue

  • ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์ „์—๋Š” full ์ธ์ง€ ํ™•์ธ, ์‚ญ์ œ ์ „์—๋Š” empty ์ธ์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.

  • ์žฅ๋‹จ์ 

    • ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋น ๋ฅด๋‹ค.

    • ์ค‘๊ฐ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.

  • ์˜ˆ์‹œ

    • ๊ทธ๋ž˜ํ”„์˜ ๋„“์ด ์šฐ์„  ํƒ์ƒ‰ (BFS) ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

    • ์ปดํ“จํ„ฐ ๋ฒ„ํผ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋งˆ๊ตฌ ์ž…๋ ฅ๋˜์—ˆ์œผ๋‚˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ชปํ•  ๋•Œ, ์ผ๋‹จ ๋ฒ„ํผ ํ์— ์ผ๋ ฌ๋กœ ๋Œ€๊ธฐ๋ฅผ ์‹œ์ผœ๋†“๋Š”๋‹ค.

    • ํ”„๋ฆฐํŠธ์˜ ๋Œ€๊ธฐ์—ด์—๋„ ์‚ฌ์šฉ๋œ๋‹ค.

    • ์€ํ–‰์—…๋ฌด, ์ฝœ์„ผํ„ฐ ๊ณ ๊ฐ ๋Œ€๊ธฐ์‹œ๊ฐ„, ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

  • ๊ตฌํ˜„

    • ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„์€ ๊ฐ€๋Šฅํ•˜๋‚˜, ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

    • Queue ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•จ: LinkedList

    • java.util.Queue, java.util.LinkedList import ํ•˜๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ง€์› ๋งค์†Œ๋“œ

    • add : ์ถ”๊ฐ€

    • offer : ์ถ”๊ฐ€

    • poll : ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ, queue ๋น„์–ด์žˆ๋‹ค๋ฉด null

    • remove : remove ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ

    • clear : ํ ์ „์ฒด ์ œ๊ฑฐ

    • peek : ๋งจ ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์กฐํšŒ

์˜ˆ์‹œ

package practice.algorithm.stackqueue;

import java.util.LinkedList;
import java.util.Queue;

public class QueuePractice {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.offer("h");
        queue.offer("e");
        queue.offer("l");
        queue.add("l");
        queue.add("o");
        System.out.println("queue = " + queue);

        System.out.println("queue.isEmpty() = " + queue.isEmpty());
        System.out.println("queue.poll() = " + queue.poll());
        System.out.println("queue.remove() = " + queue.remove());
        System.out.println("queue.peek() = " + queue.peek());
        System.out.println("queue = " + queue);

        queue.clear();
        System.out.println("queue = " + queue);
        System.out.println("queue.isEmpty() = " + queue.isEmpty());

        /**
         * queue = [h, e, l, l, o]
         * queue.isEmpty() = false
         * queue.poll() = h
         * queue.remove() = e
         * queue.peek() = l
         * queue = [l, l, o]
         * queue = []
         * queue.isEmpty() = true
         * */
    }
}

์šฐ์„ ์ˆœ์œ„ ํ - priority queue

  • ์„ ํ˜• ํ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ์ผ์ˆ˜๋ก ๋จผ์ € ์‚ญ์ œ๋œ๋‹ค.

  • ๋งŒ์•ฝ์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™๋‹ค๋ฉด, ์‚ฝ์ž…๋œ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

  • ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ์‹œ, ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ์„œ ์š”์†Œ๋“ค์„ ์ •๋ ฌํ•ด์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„๋œ๋‹ค. -> Heap์ฐธ๊ณ 

  • ์˜ˆ์‹œ

    • ์‘๊ธ‰์‹ค์—์„œ ์‘๊ธ‰ํ™˜์ž๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์„œ ๋จผ์ € ์ง„๋ฃŒ๋ฐ›๋Š” ํ™˜์ž๊ฐ€ ๋’ค๋กœ ๋ฐ€๋ฆฌ๋Š” ๊ฒฝ์šฐ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : ํž™์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด,

    • ์‚ฝ์ž…๊ณผ ์‚ญ์ œ : O(logN)

    • ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ์—๋Š” O(1)

์›ํ˜• ํ - circular queue, ring buffer

  • ํ๋Š” ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ณ ์ •๋˜์–ด์žˆ๊ณ  ๋ฐ์ดํ„ฐ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์‹œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์€ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ๊ฒฐ๊ตญ index ๊ฐ€ ๋งˆ์ง€๋ง‰์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋ฉด, ์•ž์ชฝ ๊ณต๊ฐ„์ด ํ……ํ…… ๋น„์–ด์žˆ๋”๋ผ๋„ ๊ทธ๊ฒƒ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์›ํ˜• ํ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜„์žฌ์˜ ์š”์†Œ๋“ค์„ ์•ž์œผ๋กœ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๋ณ„๋„์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ๋‹ค.

  • function enqueue() {
      // ...
      rear = (rear + 1) % queue_size;
    }
    
    function dequeue() {
      // ...
      front = (front + 1) % queue_size;
    }
    • ์œ„์™€ ๊ฐ™์ด ํ ์ „์ฒด ์‚ฌ์ด์ฆˆ๊ฐ€ 5์ด๊ณ , ํ˜„์žฌ rear ๊ฐ€ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์ธ 4๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค์‹œ enqueue ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ „์ฒด ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„œ๋Š” 5๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค. ์ด๋•Œ, ์ด 5๋ฅผ ๋‹ค์‹œ ์ „์ฒด ํ์˜ ์‚ฌ์ด์ฆˆ๋งŒํผ ๋‚˜๋ˆ„๊ฒŒ ๋˜๋ฉด, (4+1) % 5 = 0์ด ๋œ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ 

Last updated