Skip to content

Commit 3abc546

Browse files
authored
[Bona1122] 25.01.16 (#25)
* Card bundle / 중급 * Park walk / 중급 * Burger making / 중급 * Process / 심화 * Feature dev / 심화 * Truck on bridge / 심화
1 parent 0a5d8e1 commit 3abc546

File tree

6 files changed

+214
-0
lines changed

6 files changed

+214
-0
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// https://school.programmers.co.kr/learn/courses/30/lessons/133502
2+
3+
function solution(ingredient) {
4+
let stack = [];
5+
let result = 0;
6+
for (let i = 0; i < ingredient.length; i++) {
7+
let item = ingredient[i];
8+
stack.push(item);
9+
if (stack.length >= 4) {
10+
let last4 = stack.slice(-4);
11+
if (last4.join("") === "1231") {
12+
result++;
13+
stack.splice(-4);
14+
}
15+
}
16+
}
17+
return result;
18+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// https://school.programmers.co.kr/learn/courses/30/lessons/159994
2+
3+
// 1. 큐를 활용한 방법
4+
const solution1 = (cards1, cards2, goal) => {
5+
for (let i = 0; i < goal.length; i++) {
6+
if (goal[i] === cards1[0]) {
7+
cards1.shift();
8+
} else if (goal[i] === cards2[0]) {
9+
cards2.shift();
10+
} else return "No";
11+
}
12+
return "Yes";
13+
};
14+
15+
// 2. 포인터를 활용한 방법
16+
const solution2 = (cards1, cards2, goal) => {
17+
let p1 = 0,
18+
p2 = 0;
19+
20+
for (const word of goal) {
21+
if (word === cards1[p1]) {
22+
p1++;
23+
} else if (word === cards2[p2]) {
24+
p2++;
25+
} else return "No";
26+
}
27+
return "Yes";
28+
};
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// https://school.programmers.co.kr/learn/courses/30/lessons/42586
2+
3+
const solution = (progresses, speeds) => {
4+
let result = [];
5+
const expectedTerm = progresses.map((progress, i) => {
6+
return Math.ceil((100 - progress) / speeds[i]);
7+
});
8+
let ready = expectedTerm[0];
9+
let featCnt = 1;
10+
for (let i = 1; i < expectedTerm.length; i++) {
11+
if (ready >= expectedTerm[i]) {
12+
featCnt++;
13+
} else {
14+
result = [...result, featCnt];
15+
featCnt = 1;
16+
ready = expectedTerm[i];
17+
}
18+
}
19+
result = [...result, featCnt];
20+
return result;
21+
};
22+
23+
// 큐를 활용한 버전
24+
function solution(progresses, speeds) {
25+
const result = [];
26+
const queue = progresses.map((progress, i) => {
27+
return Math.ceil((100 - progress) / speeds[i]);
28+
});
29+
30+
while (queue.length > 0) {
31+
const expectedTerm = queue[0];
32+
let featCnt = 0;
33+
34+
while (queue.length > 0 && queue[0] <= expectedTerm) {
35+
queue.shift();
36+
featCnt++;
37+
}
38+
result.push(featCnt);
39+
}
40+
41+
return result;
42+
}

bona1122/[week3]Queue/Park_walk.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// https://school.programmers.co.kr/learn/courses/30/lessons/172928
2+
3+
function solution(park, routes) {
4+
let answer;
5+
for (let i = 0; i < park.length; i++) {
6+
for (let j = 0; j < park[i].length; j++) {
7+
if (park[i][j] === "S") {
8+
answer = [i, j];
9+
break;
10+
}
11+
}
12+
}
13+
14+
const [row, col] = [park.length, park[0].length];
15+
const map = {
16+
E: [0, 1],
17+
W: [0, -1],
18+
N: [-1, 0],
19+
S: [1, 0],
20+
};
21+
22+
for (let route of routes) {
23+
const [op, n] = route.split(" ");
24+
const [dx, dy] = map[op];
25+
const [x, y] = answer;
26+
const newX = x + dx * Number(n);
27+
const newY = y + dy * Number(n);
28+
29+
// 다음 위치가 공원을 벗어나는지 체크
30+
if (newX < 0 || newX >= row || newY < 0 || newY >= col) continue;
31+
32+
// 장애물 체크
33+
let isBlocked = false;
34+
for (let i = 1; i <= Number(n); i++) {
35+
const checkX = x + dx * i;
36+
const checkY = y + dy * i;
37+
if (park[checkX][checkY] === "X") {
38+
isBlocked = true;
39+
break;
40+
}
41+
}
42+
43+
if (!isBlocked) {
44+
answer = [newX, newY];
45+
}
46+
}
47+
48+
return answer;
49+
}

bona1122/[week3]Queue/Process.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// https://school.programmers.co.kr/learn/courses/30/lessons/42587
2+
3+
function solution(priorities, location) {
4+
const queue = priorities.map((item, idx) => [item, idx]);
5+
let poppedNum = 0;
6+
7+
while (queue.length > 0) {
8+
const current = queue.shift();
9+
const isHighestPriority = queue.every((item) => item[0] <= current[0]);
10+
11+
if (isHighestPriority) {
12+
poppedNum++;
13+
if (current[1] === location) return poppedNum;
14+
} else {
15+
queue.push(current);
16+
}
17+
}
18+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// https://school.programmers.co.kr/learn/courses/30/lessons/42583
2+
3+
// 방법 1: 공간 관점 풀이(다리를 배열로 표현하여 물리적 공간을 시뮬레이션)
4+
function solution1(bridge_length, weight, truck_weights) {
5+
// 다리의 전체 칸을 0으로 초기화 (각 칸이 다리의 실제 위치를 표현)
6+
const bridge = Array(bridge_length).fill(0);
7+
let current_weight = 0;
8+
let time = 0;
9+
10+
while (truck_weights.length > 0 || current_weight > 0) {
11+
// 매 초마다 맨 앞 칸의 트럭(또는 0)을 제거하여 이동 표현
12+
current_weight -= bridge.shift();
13+
14+
// 다리에 새 트럭을 진입시킬 수 있는지 확인
15+
if (
16+
truck_weights.length > 0 &&
17+
current_weight + truck_weights[0] <= weight
18+
) {
19+
const new_truck = truck_weights.shift();
20+
bridge.push(new_truck);
21+
current_weight += new_truck;
22+
} else {
23+
bridge.push(0); // 트럭이 진입할 수 없으면 빈 공간(0) 추가
24+
}
25+
26+
time++;
27+
}
28+
29+
return time;
30+
}
31+
32+
// 방법 2: 시간 관점 풀이(각 트럭의 진입 시간을 기록하여 이동 시간을 계산)
33+
function solution2(bridge_length, weight, truck_weights) {
34+
// 다리 위 트럭들의 [무게, 진입시간]을 저장하는 큐
35+
const queue = [];
36+
let time = 0;
37+
let current_weight = 0;
38+
39+
while (truck_weights.length > 0 || queue.length > 0) {
40+
time++;
41+
42+
// 선두 트럭의 이동 시간이 다리 길이와 같아지면 다리에서 제거
43+
if (queue.length > 0 && time - queue[0][1] === bridge_length) {
44+
current_weight -= queue.shift()[0];
45+
}
46+
47+
// 새 트럭의 진입 시간과 무게를 큐에 기록
48+
if (
49+
truck_weights.length > 0 &&
50+
current_weight + truck_weights[0] <= weight
51+
) {
52+
const truck = truck_weights.shift();
53+
queue.push([truck, time]);
54+
current_weight += truck;
55+
}
56+
}
57+
58+
return time;
59+
}

0 commit comments

Comments
 (0)