Skip to content

Commit 947ecc7

Browse files
committed
Merge branch 'main' into ohchaeyeon
2 parents 4b3f8ee + 4790475 commit 947ecc7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1003
-0
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
function solution(dot) {
2+
let queue = [...dot]
3+
4+
const x = queue.shift();
5+
const y = queue.shift();
6+
7+
if(x > 0 && y > 0) return 1;
8+
if(x < 0 && y > 0) return 2;
9+
if(x < 0 && y < 0) return 3;
10+
return 4;
11+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
function solution(ingredient) {
2+
let stack = [];
3+
let count = 0;
4+
let i = 0;
5+
6+
while(i < ingredient.length) {
7+
stack.push(ingredient[i]);
8+
9+
if(stack.length >= 4) {
10+
const len = stack.length;
11+
if(stack[len-4] === 1 &&
12+
stack[len-3] === 2 &&
13+
stack[len-2] === 3 &&
14+
stack[len-1] === 1) {
15+
stack.splice(-4);
16+
count++;
17+
}
18+
}
19+
i++;
20+
}
21+
22+
return count;
23+
}
24+
25+
// function solution(ingredient) {
26+
// let queue = [...ingredient];
27+
// let stack = [];
28+
// let count = 0;
29+
30+
// while(queue.length > 0) {
31+
// stack.push(queue.shift());
32+
33+
// if(stack.length >= 4) {
34+
// const len = stack.length;
35+
// if(stack[len-4] === 1 &&
36+
// stack[len-3] === 2 &&
37+
// stack[len-2] === 3 &&
38+
// stack[len-1] === 1) {
39+
// stack.splice(-4);
40+
// count++;
41+
// }
42+
// }
43+
// }
44+
45+
// return count;
46+
// }
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
function solution(n) {
2+
let queue = [];
3+
let count = 0;
4+
for(let i = 1; i <= Math.sqrt(n); i++) {
5+
if(n % i === 0) {
6+
queue.push(i);
7+
}
8+
}
9+
while(queue.length > 0) {
10+
const num = queue.shift();
11+
const pair = n / num;
12+
13+
if(num === pair) {
14+
count++;
15+
} else {
16+
count += 2;
17+
}
18+
}
19+
20+
return count;
21+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
function solution(cards1, cards2, goal) {
2+
let queue1 = [...cards1];
3+
let queue2 = [...cards2];
4+
5+
for(let word of goal) {
6+
if(queue1.length > 0 && word === queue1[0]) {
7+
queue1.shift();
8+
}
9+
else if(queue2.length > 0 && word === queue2[0]) {
10+
queue2.shift();
11+
}
12+
else {
13+
return "No";
14+
}
15+
}
16+
return "Yes";
17+
}

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. 동시성 처리 시 적절한 동기화 메커니즘 사용
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function solution(id_pw, db) {
2+
let queue = [...db];
3+
4+
const [id, pw] = id_pw;
5+
let hasId = false;
6+
7+
while(queue.length > 0) {
8+
const [dbId, dbPw] = queue.shift();
9+
10+
if(dbId === id) {
11+
hasId = true;
12+
if(dbPw === pw) {
13+
return "login";
14+
}
15+
}
16+
}
17+
18+
return hasId ? "wrong pw" : "fail";
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function solution(numlist, n) {
2+
let queue = [...numlist];
3+
let result = [];
4+
5+
queue.sort((a, b) => {
6+
const A = Math.abs(n - a);
7+
const B = Math.abs(n - b);
8+
if(A === B) {
9+
return b - a;
10+
}
11+
return A - B;
12+
});
13+
14+
while(queue.length > 0) {
15+
result.push(queue.shift());
16+
}
17+
18+
return result;
19+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
function solution(park, routes) {
2+
let queue = [...routes];
3+
4+
let [x, y] = park.map((s, i) => [s.indexOf('S'), i]).find(v => v[0] > -1);
5+
6+
let [h, w] = [park.length, park[0].length];
7+
8+
while(queue.length) {
9+
let [d, n] = queue.shift().split(' ');
10+
let [nx, ny] = [x, y];
11+
let go = true;
12+
13+
for(let i = 0; i < n; i++) {
14+
if(d === 'N') ny--;
15+
if(d === 'S') ny++;
16+
if(d === 'W') nx--;
17+
if(d === 'E') nx++;
18+
19+
if(ny < 0 || ny >= h || nx < 0 || nx >= w || park[ny][nx] === 'X') {
20+
go = false;
21+
break;
22+
}
23+
}
24+
25+
if(go) [x, y] = [nx, ny];
26+
}
27+
28+
return [y, x];
29+
}

JustDevRae/Queue/card_bundle.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
function solution(cards1, cards2, goal) {
2+
var answer = "";
3+
for (let word of goal) {
4+
if (word == cards1[0]) {
5+
cards1.shift();
6+
} else if (word == cards2[0]) {
7+
cards2.shift();
8+
} else {
9+
answer = "No";
10+
break;
11+
}
12+
}
13+
14+
return (answer = "Yes");
15+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
function solution(dot) {
2+
var answer = 0;
3+
4+
if (dot[0] > 0 && dot[1] > 0) answer = 1;
5+
if (dot[0] < 0 && dot[1] > 0) answer = 2;
6+
if (dot[0] < 0 && dot[1] < 0) answer = 3;
7+
if (dot[0] > 0 && dot[1] < 0) answer = 4;
8+
9+
return answer;
10+
}

0 commit comments

Comments
 (0)