| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- error
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฃ๊ตฌ์กฐ
- actuator
- ๊ฐ๋ฐ์
- ๋ฐฑ์ค
- ํต์ฌ๊ฐ์ด๋
- QueryDSL
- ์ ๋ก๋ฒ ์ด์ค
- spring boot
- ์ฐ๊ด๊ด๊ณ
- Java
- ๋ฐฑ์๋๊ณต๋ถ
- spring
- ๋ฐฑ์๋
- JWT
- SpringSecurity
- array
- SpringBoot
- ์คํ๋ง๋ถํธ
- restTemplate
- JPA
- TestCode
- ORM
- LinkedList
- queue
- ์ปดํจํฐ ๊ณตํ
- ๋ฐฑ์๋์ค์ฟจ
- ์๋ฒ
- ์ปดํจํฐ ๊ตฌ์กฐ
- Today
- Total
be_better
[์๋ฃ๊ตฌ์กฐ] ํ (Queue) ๋ณธ๋ฌธ
๋ชฉ์ฐจ
๐ ํ (Queue)
ํ(Queue)๋ ํ์ชฝ ๋์์๋ ์ฝ์ ์ฐ์ฐ๋ง ์ด๋ค์ง๊ณ , ๋ค๋ฅธ ์ชฝ ๋์์๋ ์ญ์ ์ฐ์ฐ๋ง ์ด๋ค์ง๋ ์ ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- First In First Out; FIFO ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ๊ตฌ์กฐ

Enqueue, Dequeue
- Enqueue๋ ๋ฐ์ดํฐ ์ฝ์ : Rear์์ ๋ฐ์
- Dequeue๋ ๋ฐ์ดํฐ ์ญ์ : Front์์ ๋ฐ์
Front, Rear
- Front๋ ์ญ์ ์ฐ์ฐ์ด ์ด๋ค์ง๋ index
- Rear์ ์ฝ์ ์ฐ์ฐ์ด ์ด๋ค์ง๋ index
ํฌ๊ธฐ๊ฐ ์ ํด์ง ์ํ ํ ๊ตฌํ์ Front, Rear์ ๊ฐฑ์ ํด์ฃผ๋ฉด ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
๐ฆ ํ์ ์ฌ์ฉ์ฌ๋ก
- ๋๋น ์ฐ์ ํ์(BFS, Breadth-First Search) ๊ตฌํ
- ์บ์(Cache) ๊ตฌํ
- ํ๋ฆฐํฐ์ ์ถ๋ ฅ ์ฒ๋ฆฌ
- ํ๋ก์ธ์ค ๊ด๋ฆฌ
- ์ฝ์ผํฐ ๊ณ ๊ฐ ๋๊ธฐ์๊ฐ
โ๐ป ํ ADT (์ถ์ ๋ฐ์ดํฐ ํ์ )
| create() | ํ ์์ฑ | |
| enQueue(data) | Rear์ ๋ฐ์ดํฐ ์ฝ์ | |
| deQueue() | Front์์ ๋ฐ์ดํฐ ์ญ์ ํ๋ฉด์ ๊ฐ return | |
| peek() | ํ์์ ๋ฐ์ดํฐ ์ญ์ ํ์ง ์๊ณ Front ๊ฐ return | |
| contains(data) | ํ์ data๊ฐ ํฌํจ๋์ด ์๋์ง ํ์ธ true, false | |
| isEmpty() | ํ๊ฐ ๋น์ด์๋์ง ํ์ธ (front == rear) | |
| isFull() | ํ๊ฐ ๊ฐ๋ ์ฐจ์๋์ง ํ์ธ (front == (rear + 1)) | |
| size() | ํ์ ํฌ๊ธฐ ๋ฐํ int return | |
| clear() | ํ์ ๋ฐ์ดํฐ ์ด๊ธฐํ | |
| print() | ํ์ ๋ฐ์ดํฐ ์ถ๋ ฅ | |
โ๏ธ ํ ๊ธฐ๋ฅ & ๋์์๋ฆฌ
์์ฑ
- front, rear ๋ณ์ ์ ์ธ
- ํ์ ํฌ๊ธฐ๋ ์ํ๋ ํฌ๊ธฐ๋ณด๋ค 1๋งํผ ๋ ํ ๋น
- 2๋ฒ๊ณผ ๊ฐ์ด ํ๋ ์ด์ ๋ ์ด๊ธฐ front, rear์ ๊ฐ์ ์์น์ ์ก์์ฃผ๊ธฐ ์ํจ

// ์๋ ์ฝ๋
T[] Queue; // Queue Array ์์ฑ
int front = 0;
int rear = 0; // ์ด๊ธฐ front, rear๋ ๊ฐ๊ฒ ์ค์
public void createQueue(int size) {
T[] Queue = new T[size + 1]; // size + 1์ ํ ํ์ ๋ฐฐ์ด ์์ฑ
}
์ฝ์
- ํ๊ฐ ๊ฐ๋ ์ฐจ์๋์ง ํ์ธ isFull() -> front์ rear์ด ๊ฐ์ ๊ฐ์ธ์ง ํ์ธ
- ๊ฐ๋ ์ฐจ์๋ค๋ฉด isFull() true ๋ฐํ ํ ์ข ๋ฃ
- ๊ฐ๋ ์ฐจ์์ง ์๋ค๋ฉด rear์ ํ๋ ์ฆ๊ฐ
- rear์ ๋ฐ์ดํฐ ์ฝ์ (enQueue)
// ์๋ ์ฝ๋
public void enQueue(T item) {
if (isFull()) {
return error;
}
rear = (rear + 1) % Queue.length;
/*
* rear + 1 ์ ํ์ ๋ ์ฒ์ ์ ํด์ค ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ๋์ ์๋ ์๋ค.
* ๊ทธ๋ ๊ฒ ๋๋ฉด ์๋ฌ๊ฐ ๋๊ธฐ ๋๋ฌธ์ front != rear ์ด ์๋๋ผ๋ฉด
* % Queue.length๋ฅผ ํด์ ๋ค์ 0๋ถํฐ ์์ํ ์ ์๊ฒ ํ๋ค.
*/
Queue[rear] = item;
}
์ญ์
- ํ๊ฐ ๋น์ด์๋์ง ํ์ธ isEmpty()
- ๋น์ด์๋ค๋ฉด isEmpty() true ๋ฐํ ํ ์ข ๋ฃ
- ๋น์ด์์ง ์๋ค๋ฉด front ํ๋ ์ฆ๊ฐ
- ์ฆ๊ฐํ front์ ๋ฐ์ดํฐ ๋ฐํ (deQueue)
// ์๋ ์ฝ๋
public T deQueue() {
if (isEmpty()) {
return error;
}
front = (front + 1) % Queue.length;
/*
* enQueue์ rear๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก %์ฐ์ฐ์ผ๋ก ์ํ ํ ๊ด๋ฆฌ
*/
return Queue[front];
}
๐ค ์ฝ๋์ ๋ํ ์๋ฌธ
๋ฐํํ๋ ค๋ ๊ฐ์ ๋ค๋ฅธ ๋ณ์์ ๋ฏธ๋ฆฌ ์ ์ฅํด๋๊ณ ๊ทธ ๊ฐ์ ๋ฐํํด์ผ ํ๋ ๊ฒ์ด ์๋๊ฐ?
์ฒ์ ํ๋ฅผ ๋ง๋ค ๋ front, rear์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์์ง ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ฐ์ด ํ๋๋ผ๋ ๋ค์ด์์ ๋ rear์ ์ฆ๊ฐ์์ผฐ๋ค.
์ด๊ธฐ front์๋ ์๋ฌด๊ฐ๋ ๋ค์ด ์์ง ์์ผ๋ deQueueํ๋ ค๋ ๊ฐ์ ํ์ฌ front์์น๊ฐ ์๋๋ผ ๊ทธ ๋ค์ ์์น์ ๊ฐ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ front + 1 ์์น์ ์๋ ๊ฐ์ ๋ฐํํ๋ ๊ฒ.
๋ค์ deQueue ๋์์ ํ๊ฒ๋๋ฉด ๋๋ค์ front + 1์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ front์ ๊ฐ์ ๋ฐ๋ก ์ง์์ค ํ์๋ ์๋ค.
โฑ๏ธ ํ์ ์๊ฐ๋ณต์ก๋
- ์ฝ์ (Insertion) O(1)
- ์ญ์ (Deletion) O(1)
- ๊ฒ์(Search) O(n)
์ฝ์ (Enqueue)์ Front์์ ์ด๋ค์ง๊ณ ์ญ์ (Dequeue)๋ Rear์์ ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ํ๋ฒ์ฉ๋ง ์ํํ๋ฉด ๋๋ค. O(1)
๊ฒ์์ ์ํ๋ ๊ฐ์ ์ฐพ์ ๋ ๊น์ง ๊ณ์ ์ํํด์ผ๋๊ธฐ ๋๋ฌธ์ ์ต๋ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
'์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๋ฃ๊ตฌ์กฐ] ํธ๋ผ์ด (Trie) (0) | 2023.08.24 |
|---|---|
| [์๋ฃ๊ตฌ์กฐ] ๋ฐฐ์ด (Array) (0) | 2023.08.10 |
| [์๋ฃ๊ตฌ์กฐ] ์คํ (Stack) (0) | 2023.08.10 |