Skip to content

๐Ÿงพ Queue

LeeHaeIn edited this page Apr 6, 2025 · 1 revision

ํ์˜ ๊ฐœ๋…

  • ์„ ์ž… ์„ ์ถœ, FIFO ๊ตฌ์กฐ(First In First Out)
  • ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ : Enqueue(Add)
  • ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ : Dequeue(Poll)

image

ํ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๋Š” ๋ถ„์•ผ

๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ์„ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ํ์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ์ฃผ๋กœ ์—ฌ๋Ÿฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ๋•Œ ํ™œ์šฉ๋จ

  • ์ž‘์—… ๋Œ€๊ธฐ์—ด : ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•  ๋•Œ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์ž‘์—…์„ ์š”์ฒญํ•˜๋ฉด ์„œ๋ฒ„๋Š” ์š”์ฒญ์ด ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌ
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ : ์–ด๋–ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฒคํŠธ, ์ฆ‰ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์ด๋‚˜ ๋งˆ์šฐ์Šค ์›€์ง์ž„์„ ์ฒ˜๋ฆฌํ•  ๋•Œ

ํ์˜ ADT

ADT (Abstract Data Type, ์ถ”์ƒ ๋ฐ์ดํ„ฐ ํƒ€์ž…) : ๋ฐ์ดํ„ฐ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์ ธ์•ผ ํ•  ์—ฐ์‚ฐ๋“ค์„ ์ •์˜ ํ•œ ๊ฒƒ , ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๊ฐ€์ ธ์•ผ ํ•  ๊ธฐ๋Šฅ(๋ฉ”์†Œ๋“œ)๋“ค์˜ ๋ช…์„ธ์„œ

๊ตฌ๋ถ„ ์ •์˜ ์„ค๋ช…
์—ฐ์‚ฐ boolean isFull() ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ maxsize์ธ์ง€ ํ™•์ธ
boolean isEmpty() ํ์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ์ง€ ํ™•์ธ
void add(ItemType item) ํ์— ๋ฐ์ดํ„ฐ๋ฅผ add
ItemType poll() ํ์—์„œ ์ตœ๊ทผ์— add ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๊ณ  ๋ฐ˜ํ™˜
์ƒํƒœ int front ํ์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— pollํ•œ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
int rear ํ์—์„œ ์ตœ๊ทผ์— addํ•œ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๊ธฐ๋ก
ItemType data[maxsize] ํ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฐ์—ด, maxsize๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

image 1

1 ๋‹จ๊ณ„ : isFull , add

image 2

1๏ธโƒฃ isFull() ์—ฐ์‚ฐ์œผ๋กœ ํ˜„์žฌ ํ๊ฐ€ ๊ฐ€๋“ ์ฐผ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ๊ฐ€ ๊ฐ€๋“ ์ฐจ์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ

2๏ธโƒฃ rear์„ +1 ํ•œ ํ›„ rear๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์—

3๏ธโƒฃ 3์„ add ํ•จ (๋ฐ˜๋Œ€๋กœ isFull ์ธ ture์ด๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ addํ•˜์ง€ ์•Š์Œ)

2 ๋‹จ๊ณ„ : poll

image 3

1๏ธโƒฃ isEmpty() ์—ฐ์‚ฐ์œผ๋กœ ํ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ, front์™€ rear์˜ ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธํ•ด์„œ ํ์— ์›์†Œ๊ฐ€ ์—†๋Š”๋ฐ pollํ•˜๋Š” ๋™์ž‘์„ ๋ฐฉ์ง€ํ•จ

2๏ธโƒฃ ๋งŒ์•ฝ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด(isEmpty๊ฐ€ false) front๋ฅผ +1 ํ•˜๋ฉด front์™€ rear๊ฐ€ 0์œผ๋กœ ๊ฐ™์•„์ง€๊ฒŒ ๋˜๊ณ 

3๏ธโƒฃ isEmpty() ์—ฐ์‚ฐ ์‹œ ํ๊ฐ€ ๋นˆ ๊ฒƒ(isEmpty๊ฐ€ true)์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์‹ค์ œ ๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

โญ ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์–ด๋„ front==rear ์ด๋ฏ€๋กœ ๋นˆ ํ๋กœ ์ƒ๊ฐํ•˜๊ฒŒ ๋จ

3 ๋‹จ๊ณ„ : ๊ณ„์†ํ•ด์„œ add

image 4

1๏ธโƒฃ 5๋ฅผ addํ•˜๋ฉด isFull() ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด ํ๊ฐ€ ๊ฐ€๋“ ์ฐผ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , ๊ฐ€๋“์ฐจ์ง€ ์•Š์•˜๋‹ค๋ฉด add

2๏ธโƒฃ ๊ณ„์†ํ•ด์„œ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ 6, 8์„ addํ•˜๋ฉด front๋Š” 0, rear์€ 3์ด ๋จ

4 ๋‹จ๊ณ„ : ๊ฐ€๋“์ฐฌ ์ƒํƒœ์—์„œ add

image 5

1๏ธโƒฃ rear๊ฐ€ 3์ด๋ฏ€๋กœ maxsize-1๊ณผ ๊ฐ™๊ฒŒ ๋˜๋ฏ€๋กœ

2๏ธโƒฃ isFull() ์—ฐ์‚ฐ์€ true์œผ๋ฏ€๋กœ addํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋จ

โš ๏ธ ์ด๋•Œ, ์‹ค์ œ data์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” 2, 5, 6, 8 ๋กœ 4๊ฐœ์ง€๋งŒ ํ๋Š” 5, 6, 8 ๋กœ 3๊ฐœ, ์ฆ‰ ํ๋Š” front ์˜ ๋‹ค์Œ ๋ถ€ํ„ฐ rear๊นŒ์ง€๋ฅผ ํ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•จ

โžก๏ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ๋‚ญ๋น„, ํ๋ฅผ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ(ํ๋ฅผ ์›ํ˜•์œผ๋กœ ๊ฐœ์„ ๊ฐ€๋Šฅ)

ํ ๊ตฌํ˜„

1. Queue์˜ ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์šฉํ•˜๊ธฐ

  • add ์—ฐ์‚ฐ : add()
  • poll ์—ฐ์‚ฐ : poll()

โ—add()๋ฉ”์„œ๋“œ ๋Œ€์‹  offer()๋ฉ”์„œ๋“œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํšŸ์ˆ˜๊ฐ€ offer๊ฐ€ 1ํšŒ ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— add๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ทผ์†Œํ•œ ์ฐจ์ด๋กœ ๋น ๋ฆ„

์ž๋ฐ” ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ Queue์˜ ๊ตฌํ˜„์ฒด๋กœ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” ArrayDeque, LinkedList๊ฐ€ ์žˆ์Œ

image 6

import java.util.Queue;
import java.util.ArrayDeque;

// ํ๋ฅผ ๊ตฌํ˜„ํ•œ ArrayDeque ๊ฐ์ฒด ์ƒ์„ฑ
Queue<Integer> queue = new ArrayDeque<>();

// ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.add(1);
queue.add(2);
queue.add(3);

// ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด์„œ ๋ฐ˜ํ™˜
int first = queue.poll();
System.out.println(first); // 1

// ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.add(4);
queue.add(5);

// ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด์„œ ๋ฐ˜ํ™˜
first- queue.poll();
System.out.println(first); // 2

2. ๋ฑ(ArrayDeque) ํด๋ž˜์Šค ํ™œ์šฉํ•˜๊ธฐ

Deque(Double Ended Queue) ์€ ์–‘ ๋์—์„œ ์‚ฝ์ž… ๋˜๋Š” ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ

  • add ์—ฐ์‚ฐ : add() / addLast()
  • poll ์—ฐ์‚ฐ : poll() / pollFirst()

image 7

import java.util.ArrayDeque;

// ํ๋ฅผ ๊ตฌํ˜„ํ•œ ArrayDeque ๊ฐ์ฒด ์ƒ์„ฑ
ArrayDeque<Integer> queue = new ArrayDeque<>();

// ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.addLast(1);
queue.addLast(2);
queue.addLast(3);

// ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด์„œ ๋ฐ˜ํ™˜
int first = queue.pollFirst();
System.out.println(first); // 1

// ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
queue.addLast(4);
queue.addLast(5);

// ํ์˜ ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด์„œ ๋ฐ˜ํ™˜
first- queue.pollFirst();
System.out.println(first); // 2
๐Ÿ–Š๏ธ๊ฐœ๋…์ •๋ฆฌ
๐Ÿ–Š๏ธ๋ฌธ์ œํ’€์ด

Clone this wiki locally