Coding Test/Data Structure & algorithm

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

๊ต ๋ฏผ 2024. 9. 6. 21:04

๐Ÿ“Œํ : ์„ ์ž…์„ ์ถœ(First In First Out, FIFO)์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๊ฐ€์žฅ ๋จผ์ € ์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

ํ ๊ตฌํ˜„

 

Java์—์„œ ํ๋Š” ์ฃผ๋กœ Queue<E> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , LinkedList<E> / ArrayDeque<E> / PriorityQueue<E> ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

Queue<Integer> queue = new LinkedList<>();
Queue<Integer> queue = new ArrayDeque<>();

 

 

๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ
  • offer(E e) : ํ์˜ ๋งจ ๋’ค์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 
    • ์„ฑ๊ณตํ•˜๋ฉด true, ์‹คํŒจํ•˜๋ฉด false ๋ฐ˜ํ™˜
  • poll() : ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค. 
    • ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด null ๋ฐ˜ํ™˜
  • peek() : ํ์˜ ๋งจ ์•ž์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    • ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด null ๋ฐ˜ํ™˜
  • isEmpty() : ํ๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํ™•์ธ
  • size() : ํ ์•ˆ์˜ ์š”์†Œ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

 

 

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋นˆ์ถœ ์œ ํ˜•

 

1. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ (BFS)

*BFS : ๊ทธ๋ž˜ํ”„๋‚˜ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋“ค๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ๊ตฌ์กฐ

***ํ›„์— DFS/BFS ๊ฒŒ์‹œ๊ธ€์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฐ ์˜ˆ์ •***

 

 

2. ํ”„๋ฆฐํ„ฐ ๋ฌธ์ œ (์šฐ์„ ์ˆœ์œ„ ํ)

*์šฐ์„ ์ˆœ์œ„ ํ : ๊ฐ ์š”์†Œ์— ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์š”์†Œ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

 

๐Ÿ“„ ์œ ํ˜• ์ดํ•ด ์ฝ”๋“œ ๐Ÿ“„

//reverseOrder() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์—ญ์ˆœ์œผ๋กœ ์ ์šฉ๋˜์–ด, ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋จผ์ €๋‚˜์˜ค๋„๋ก ๋™์ž‘
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
pq.offer(1);
pq.offer(3);
pq.offer(2);
System.out.println(pq.poll());   
// ์ถœ๋ ฅ: 3

 

 

3. ์นด๋“œ ๋ฌธ์ œ (์›ํ˜• ํ / ํšŒ์ „ ํ) 

: ์นด๋“œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋ฒ„๋ฆฌ๊ณ , ๋‚จ์€ ์นด๋“œ๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ

*ํšŒ์ „ ํ : ํ์—์„œ ์š”์†Œ๋ฅผ ๊บผ๋‚ธ ํ›„ ๋‹ค์‹œ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹

 

๐Ÿ“„ ์œ ํ˜• ์ดํ•ด ์ฝ”๋“œ ๐Ÿ“„

Deque<Integer> deque = new ArrayDeque<>();
deque.offerLast(1);
deque.offerLast(2);
deque.offerLast(3);

deque.pollFirst();  // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ
deque.offerLast(2); // ํ์˜ ๋์— ๋‹ค์‹œ ์ถ”๊ฐ€

 

 

ํ ์‚ฌ์šฉ ์‹œ ์œ ์˜ ์‚ฌํ•ญ
  • ๊ตฌํ˜„ ๋ฐฉ์‹ ์„ ํƒ : ํ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํด๋ž˜์Šค๋“ค์€ ์„œ๋กœ ๋‹ค๋ฅธ ํŠน์ง•์„ ์ง€๋…€, ์ƒํ™ฉ์— ๋งž๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.
    • LinkedList: ๋…ธ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ ์—ฐ์‚ฐ์—์„œ ์ผ์ •ํ•œ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•œ๋‹ค.
    • ArrayDeque: ๋ฐฐ์—ด ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์ด ์ข‹๊ณ  ์„ฑ๋Šฅ์ด ๋น ๋ฅด๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ : ํ๊ฐ€ ๊ณ„์† ์ปค์ง€๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๊ธฐ์—, ์›ํ˜• ํ์™€ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.