1. ํ(queue)๋ ๋ฌด์์ธ๊ฐ?
'ํ(queue)' ๋ '์ค์ ์๋ค'๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์๋ค. ํ๋ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ์ด๋ฐ ํ์ ํน์ง์ FIFO(First In First Out) ๋๋ ์ ์ ์ ์ถ์ด๋ผ๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์์ ์ฝ์ ํ๋ ์ฐ์ฐ์ Enqueue(add) ๋ผ๊ณ ํ๊ณ , ๊บผ๋ด๋ ์ฐ์ฐ์ Dequeue(Poll) ์ด๋ผ๊ณ ํ๋ค.
2. ํ์ ADT
๊ตฌ๋ถ | ์ ์ | ์ค๋ช |
์ฐ์ฐ | boolean isFull() | ํ์ ๋ค์ด ์๋ ๋ฐ์ดํฐ ๊ฐ์๊ฐ maxsize ์ธ์ง ํ์ธ ํด์ boolean ๊ฐ์ ๋ฐํ |
boolean isEmpty() | ํ์ ๋ค์ด ์๋ ๋ฐ์ดํฐ๊ฐ ํ๋๋ ์๋์ง ํ์ธํด์ boolean ๊ฐ์ ๋ฐํ | |
void add(ItemType item) | ํ์ ๋ฐ์ดํฐ ์ฝ์ | |
ItemType poll() | ํ์์ ์ฒ์์ ์ฝ์ ํ ์ ์ดํฐ๋ฅผ ๊บผ๋ด์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ | |
์ํ | int front | ํ์์ ๊ฐ์ฅ ๋ง์ง๋ง์ poll ํ ์์น๋ฅผ ๊ธฐ๋ก |
int rear | ํ์์ ์ต๊ทผ์ addํ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๊ธฐ๋ก | |
ItemType data[maxsize] | ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฐ์ด (์ต๋ maxsize๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํจ) |
2-1. 1๋จ๊ณ_๋น์ด์๋ ํ์ add() ์ฐ์ฐ
isFull() ์ฐ์ฐ์ผ๋ก ํ์ฌ ํ๊ฐ ๊ฐ๋ ์ฐผ๋์ง ํ์ธํ๊ณ ํ๊ฐ ๊ฐ๋ ์ฐจ์ง ์์๋ค๋ฉด(isFull์ ๊ฒฐ๊ณผ๊ฐ false) rear์ +1์ ํ ๋ค์ rear๊ฐ ๊ฐ๋ฆฌํค๋ ์์น์ 3์ addํ๋ค. ๋ง์ฝ isFull ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ์ด true๋ผ๋ฉด ์ด๋ฏธ ํ๊ฐ ๊ฝ ์ฐฌ ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ(add)ํ์ง ์๋๋ค.
2-2. 2๋จ๊ณ_๋ฐฐ์ด ๊ธฐ๋ฐ์ ์ํ ํ (Circular Queue)์์ poll() ์ฐ์ฐ
poll()์ ํ์ ์์๋ฅผ ๊บผ๋ด๋ ๋ฉ์๋์ด๋ค. ์ ์ํ์์ poll()์ ํธ์ถํ๊ธฐ ์ ์ isEmpty() ์ฐ์ฐ์ ์ํํ์ฌ ํ๊ฐ ๋น์ด ์๋์ง ํ์ธํ๋ค. isEmpty()๋ front == rear์ผ ๋ true๋ฅผ ๋ฐํํ๋ค. ๋ง์ฝ true๋ผ๋ฉด ํ๊ฐ ๋น์ด ์๋ ๊ฒ์ด๋ฏ๋ก poll() ์ฐ์ฐ์ ์ํํ์ง ์๊ณ ์ข ๋ฃ๋๋ค.
๋ฐ๋ฉด, ๋ง์ฝ ํ๊ฐ ๋น์ด ์์ง ์๋ค๋ฉด (isEmpty()๊ฐ false๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ), front ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค. ์ํ ํ๋ผ๋ฉด (front + 1) % capacity ์ฐ์ฐ์ ์ํํด์ ์ํ๊ตฌ์กฐ๊ฐ ์ ์ง๋๋ค.
๊ทธ๋์ ๋ฐฐ์ด์์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๋ ๊ฒ์ด ์๋๋ผ front ์์น๋ง ๋ณ๊ฒฝํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๊ฒ์ฒ๋ผ ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๋ง์ฝ poll() ํ front == rear์ด๋ฉด ํ๊ฐ ๋น์ด ์์์ ์๋ฏธํ๊ณ isEmpty() ์ฐ์ฐ ์ true๊ฐ ๋์จ๋ค.
์ํ ํ์์๋ front์ rear๋ฅผ ์ํ ๊ตฌ์กฐ๋ก ์ ์งํ์ฌ ๋ฐฐ์ด์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ค. ๋ฐ๋ฉด์ ์ํ ํ (Circular Queue) ๊ฐ ์๋ ์ผ๋ฐ์ ์ธ ๋ฐฐ์ด ๊ธฐ๋ฐ ํ๋ผ๋ฉด, poll() ์๋ง๋ค front๊ฐ ์ฆ๊ฐํ๋ฉด์ ๋ฐฐ์ด ๊ณต๊ฐ์ด ๋ญ๋น๋ ์ ์๋ค. ์ด๊ฒ์ ๋ฐฉ์งํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์์ผ๋ก ๋น๊ธฐ๋ ์ถ๊ฐ ์์ ์ด ํ์ํ๋ค.
2-3. 3๋จ๊ณ_๊ณ์ํด์ add() ํ๊ธฐ
๊ณ์ํด์ add ํ๋ค. 5๋ฅผ addํ๋ฉด isFull() ์ฐ์ฐ์ ์ํํด์ ํ๊ฐ ๊ฐ๋ ์ฐผ๋์ง ํ์ธํ๊ณ , ๊ฐ๋ ์ฐจ์ง ์์ผ๋ฉด ์ซ์๋ฅผ ํ์ ์ถ๊ฐํ๋ค. 6๊ณผ 8์ addํ๊ณ ๋๋ฉด front ๋ 0 rear๋ 3์ด ๋๋ค.
2-4. 4๋จ๊ณ_ํ๊ฐ ๊ฐ๋ ์ฐผ์ ๋ add()ํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋ ๊น?
์ด์ ํ๊ฐ ๊ฐ๋ ์ฐผ์ ๋ addํ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ์ดํด ๋ณด์. rear๊ฐ 3์ด๊ธฐ ๋๋ฌธ์ maximize-1๊ณผ ๊ฐ๋ค. isFull() ์ฐ์ฐ์ true์ด๋ฏ๋ก ๋ ์ด์ add()๋ฅผ ์ํํ์ง ๋ชปํ๋ค.
์ฌ๊ธฐ์ ์๊ฐ ํด ๋ณผ ๋ด์ฉ์ด ํ๋ ์๋ค. ๋ง์ง๋ง add์์ ์ค์ data์ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ 3, 5, 6, 8๋ก 4๊ฐ ์ด์ง๋ง ํ๋ 5, 6, 8๋ก 3๊ฐ์ด๋ค. ์ฆ, ํ๋ front์ ๋ค์๋ถํฐ rear๊น์ง๋ฅผ ํ๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ก ์ธ์ํ๋ค. ์ค์ ๋ก๋ data์ ๊ณต๊ฐ์ด 4๊ฐ์ธ๋ฐ ํ๊ฐ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ 3๊ฐ์ด๋ฏ๋ก ์ค์ง์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ญ๋นํ ์ํฉ์ด๋ค. ์ด๋ ๊ฒ ๋๋ ์ด์ ๋ ํ๋ฅผ ํ ๋ฐฉํฅ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด front ์ด์ ์ ๊ณต๊ฐ์ ํ์ฉํ์ง ๋ชป ํ๋ค. ์ฆ, front ์ด์ ์ ๊ธฐ์ค์ผ๋ก ํ๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ถ๋ถ๊ณผ, ์ฌ์ฉํ ์ ์๋ ๋ถ๋ถ์ผ๋ก ๋๋๊ฒ ๋๋ค.
2-5. ํ๋ฅผ ์ํ์ผ๋ก ๋ง๋ค๊ธฐ
์์์ ์ดํด๋ณธ ๋ฌธ์ ์ ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ณ ์ํ ๋ค๋ฅธ ํํ์ ํ๊ฐ ์ํ ํ์ด๋ค. ์์๊น์ง์ ์ค๋ช ์ ์ ํํ์๋ค. ๋ญ๋นํ๋ ๊ณต๊ฐ์ ์์ ๊ธฐ ์ํด ์ํ์ผ๋ก ํ๋ฅผ ๋ง๋ค๊ณ front์ rear๊ฐ ๋์๊ฐ๋ค. ์ํ ํ๋ ์ ํ ํ๋ณด๋ค ๊ตฌํ์ด ๋ณต์กํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ค๋ง ์ฝ๋ฉํ ์คํธ์์๋ ์๋ฐ ์ปฌ๋ ์ ์์ ์ ๊ณตํ๋ Queue ์ธํฐํ์ด์ค๊น์ง๋ง ์์๋ ์ถฉ๋ถํ๋ค. ์๋ํ๋ฉด ์๋ฐ์ Queue๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ตณ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฐ๊ธฐ ์ํด ์ํ ํ๋ฅผ ์ฌ์ฉํ ํ์๊น์ง๋ ์๊ณ ์ด๋ฐ ๊ฒ ์๋ค ์ ๋๋ก ์์ ๋๋ฉด ์ข๋ค.
3. ํ๋ฅผ ๊ตฌํํ๋ 2๊ฐ์ง ๋ฐฉ์
1. Queue ์ธํฐํ์ด์ค
2. ArrayDeque ๋ฑ ํด๋์ค
3-1. Queue ์ธํฐํ์ด์ค
Queue<Integer> queue = new ArrayDeque<>();
Queue ์ธํฐํ์ด์ค์์๋ add ์ฐ์ฐ์ add()๋ก ๋ฉ์๋๋ก ์ํํ๊ณ poll ์ฐ์ฐ์ poll()๋ก ์ํํ๋ค.
add ์ฐ์ฐ์ offer() ๋ฉ์๋๋ก๋ ๊ฐ๋ฅํ์ง๋ง ๋ด๋ถ์์ offer() ๋ฉ์๋์ ํธ์ถ ํ์๊ฐ 1ํ ๋ ๋ง๊ธฐ ๋๋ฌธ์ add() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ฃผ ์ฝ๊ฐ์ ์ฐจ์ด๋ก ๋น ๋ฅผ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฐ ์ปฌ๋ ์ ํ๋ ์์ํฌ์์ Queue๋ ์ธํฐํ์ด์ค๋ก ๊ตฌํ๋์ด ์๋ค. Queue์ ๊ตฌํ์ฒด๋ก ์์ฃผ ์ฌ์ฉํ๋ ํด๋์ค๋ ArrayDeque์ LinkedList์ด๋ค. ์ฝํ ์์๋ ์ผ๋ฐ์ ์ผ๋ก LinkedList < ArrayDeque์ด๋ค.
3-2. ๋ฑ์ ํ์ฒ๋ผ ํ์ฉํ๋ ๋ฐฉ๋ฒ
ArrayQueue<Integer> queue = new ArrayDeque<>();
๋ฑ์ Double Ended Queue์ ์ค์๋ง์ด๋ค. ๋ง ๊ทธ๋๋ก ์ ๋์์ ์ฝ์ ์ด๋ ์ญ์ ๋ฅผ ํ ์ ์๋ ํ๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ค. ํ์ง๋ง ArrayDeque์์๋ add()์ poll()๋ณด๋ค addLast()๋ฉ์๋์ pollFirst() ๋ฉ์๋๋ฅผ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
์ ๊ทธ๋ฆผ์์ ํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ด First, ์ค๋ฅธ์ชฝ์ Last์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์ผ์ชฝ์์ ๊บผ๋ด๋ ๊ฑธ pollFirst(), ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฃ๋ ๊ฒ์ addLast()์ด๋ค. ์ถ๊ฐ๋ก, ๋ง์ฝ์ ๋ฐ์ดํฐ๋ฅผ addFirst()๋ก๋ง ๋ฃ๊ณ pollFirst()๋ก๋ง ๊บผ๋ด๋ฉด ๋์์ด stack์ push(), pop()๊ณผ ๋์ผํด์ ArrayDeque๋ก ํ, ์คํ, ๋ฑ ๋ชจ๋ ์ํ์ด ๊ฐ๋ฅํ๋ค.
4. ํ์ ์์๊ด๊ณ
๋ด๊ฐ ๋ง๋ ์๋ฃ ์ธ ์ฌ์ง ์๋ฃ ์ถ์ฒ
Deque, LinkedList ์ ArrayDeque
์ด๋ฒ ์๊ฐ์๋ Deque ์ธํฐํ์ด์ค๋ฅผ ์์๋ณด๊ณ ์ด์ ๊ตฌํ์ฒด์ธ LinkedList์ ArrayDeque๋ฅผ ์์๋ณด๊ณ ๋น๊ตํ ๊ฒ์ด๋ค. 1. Deque๋? ์์์ ์ถ๊ฐ์ ์ญ์ ๋ฅผ ๋ ๋ค ๋๋ถ๋ถ์์ ์ง์ํ๋ ์ ํ collection. Deque๋ผ๋ ์ด
tech-monster.tistory.com
Java: ๋ฑ(Deque)์ ๊ฐ๋ ๊ณผ ์ฌ์ฉ
๋ฑ Double-Ended Queue ํ์ ์์ชฝ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ ์๋ฃ๊ตฌ์กฐ ํ ๋๋ ์คํ์ผ๋ก๋ ์ฌ์ฉํ ์ ์๋ค ๋ฑ์ ๋ถ๋ฅ ํ ์ชฝ์ผ๋ก๋ง ์ ๋ ฅ์ด ๊ฐ๋ฅํ ๋ฑ = Scroll ํ์ชฝ์ผ๋ก๋ง ์ถ๋ ฅ์ด ๊ฐ๋ฅํ ๋ฑ = Shelf ๋ฑ์
devyoseph.tistory.com
'Algorithm > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆผ๊ณผ ๋ฌธ์ ๋ก ์์๋ณด๋ ์ด์งํธ๋ฆฌ ํ์ (์ด๋ถ ํ์, Binary Search) (12) | 2025.02.15 |
---|