Skip to content

Commit ad8b945

Browse files
committed
feat: md 파일 추가
1 parent 59443db commit ad8b945

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed

JooKangSan/[week3]Queue/Queue.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# JavaScript Queue Algorithm
2+
3+
## 1. 큐(Queue)란?
4+
5+
선입선출 원칙을 따르는 선형 자료구조 => 먼저 들어온 데이터가 먼저 나감
6+
7+
### 기본 특성
8+
9+
- 데이터는 한쪽 끝(rear)에서만 삽입되고, 다른 한쪽 끝(front)에서만 삭제됨
10+
- 주로 대기열 관리, 작업 스케줄링 등에 사용
11+
12+
## 2. 자바스크립트에서 큐 구현 방법
13+
14+
### 배열을 사용한 기본 구현
15+
16+
```javascript
17+
// 1. 기본적인 배열 메서드 사용
18+
let queue = [];
19+
20+
// 삽입 (enqueue)
21+
queue.push(element);
22+
23+
// 삭제 (dequeue)
24+
queue.shift();
25+
26+
// 맨 앞 요소 확인 (peek)
27+
queue[0];
28+
29+
// 큐가 비었는지 확인
30+
queue.length === 0;
31+
```
32+
33+
## 3. 큐의 주요 활용 사례
34+
35+
### 3.1 너비 우선 탐색(BFS)
36+
37+
```javascript
38+
function bfs(graph, start) {
39+
// 방문한 노드 저장
40+
const visited = new Set();
41+
42+
// 시작 노드를 큐에 추가
43+
const queue = [start];
44+
45+
// 큐가 빌 때까지 반복
46+
while (queue.length > 0) {
47+
// 현재 노드 추출
48+
const vertex = queue.shift();
49+
// 방문하지 않은 노드라면
50+
if (!visited.has(vertex)) {
51+
// 방문 처리
52+
visited.add(vertex);
53+
// 인접 노드들을 큐에 추가
54+
queue.push(...graph[vertex]);
55+
}
56+
}
57+
58+
return visited;
59+
}
60+
```
61+
62+
### 3.2 작업 처리 대기열
63+
64+
```javascript
65+
function processTaskQueue(tasks) {
66+
// 작업 목록을 큐로 변환
67+
const queue = [...tasks];
68+
// 결과 저장 배열
69+
const results = [];
70+
71+
// 큐가 빌 때까지 반복
72+
while (queue.length > 0) {
73+
// 작업 추출
74+
const task = queue.shift();
75+
// 작업 처리
76+
const result = processTask(task);
77+
// 결과 저장
78+
results.push(result);
79+
}
80+
81+
return results;
82+
}
83+
```
84+
85+
### 3.3 이벤트 처리
86+
87+
```javascript
88+
const eventQueue = {
89+
// 이벤트 큐 초기화
90+
queue: [],
91+
92+
// 새 이벤트 추가
93+
addEvent: function (event) {
94+
this.queue.push(event);
95+
},
96+
97+
processEvents: function () {
98+
// 큐가 빌 때까지 반복
99+
while (this.queue.length > 0) {
100+
// 이벤트 추출
101+
const event = this.queue.shift();
102+
// 이벤트 처리
103+
handleEvent(event);
104+
}
105+
},
106+
};
107+
108+
eventQueue.addEvent("event1");
109+
eventQueue.processEvents();
110+
```
111+
112+
## 4. 성능 고려사항
113+
114+
### 4.1 시간 복잡도
115+
116+
- Enqueue (삽입): O(1)
117+
- Dequeue (삭제): O(n) - shift() 사용 시
118+
- Peek (조회): O(1)
119+
120+
### 4.2 주의사항
121+
122+
1. 배열의 shift() 연산은 O(n)의 시간 복잡도를 가짐
123+
2. 대량의 데이터를 처리할 때는 최적화된 구현 방식 고려
124+
3. 메모리 관리에 주의 (불필요한 참조 제거)
125+
4. 동시성 처리 시 적절한 동기화 메커니즘 사용

0 commit comments

Comments
 (0)