Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion Programmers/Level1/64061_크레인_인형뽑기_게임.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,42 @@
/*
/*
⭐️ 문제 정보 ⭐️
문제 : 64061 - 크레인 인형뽑기 게임
레벨 : Level 1
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/64061
*/

// ANCHOR 2026.04.06 풀이 (21분 소요)
{
// 구현 문제는 재미 없다.
function solution(board, moves) {
let answer = 0;
const basket = [];
const gameBoard = Array.from({ length: board.length }, (_, i) =>
board
.map((row) => row[i])
.filter((el) => el !== 0)
.reverse(),
);

for (const move of moves) {
// 인형을 뽑음
const plush = gameBoard[move - 1].at(-1);
if (plush === undefined) continue;
gameBoard[move - 1].pop();

// 바구니를 확인
const top = basket.at(-1);
if (top !== plush) basket.push(plush);
else {
basket.pop();
answer += 2;
}
}

return answer;
}
}

// ANCHOR 2025.12.03 풀이
function solution3(board, moves) {
const boardStack = Array.from({ length: board.length }, () => new Array());
Expand Down
31 changes: 30 additions & 1 deletion Programmers/Level2/12973_짝지어_제거하기.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,39 @@
/*
/*
⭐️ 문제 정보 ⭐️
문제 : 12973 - 짝지어 제거하기
레벨 : Level 2
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12973
*/

// ANCHOR 2026.04.06 풀이 (5분 소요)
{
function solution(s) {
// 문자열의 길이가 꽤 길기 때문에 직접 제거하는 방법은 절대 비효율적
// 포인터를 이동시키는 방법도 10초 고민했으나 아님
// 아무래도 스택을 이용해야 할 것 같다.
// 서로 인접해야 지울 수 있기 때문에 지울 수 없는 문자들을 스택에 쌓아두고, 현재 문자와 동일한 것들을 제거하는 식으로 하자.

const stack = [];
for (const c of s) {
if (stack.length === 0) stack.push(c);
else {
const top = stack[stack.length - 1];
if (top === c) stack.pop();
else stack.push(c);
}
/**
* NOTE : at을 써서 동일한 로직을 좀 더 깔끔하게 작성할수도 있다.
* at은 스택이 비어있으면 undefined를 반환하기 때문에, 굳이 스택이 비어있는지 체크할 필요가 없다.
* const top = stack.at(-1);
* if (top === c) stack.pop();
* else stack.push(c);
*/
}

return stack.length === 0 ? 1 : 0;
}
}

// ANCHOR 2025.12.01 풀이
function solution2(s) {
const stack = [];
Expand Down
32 changes: 31 additions & 1 deletion Programmers/Level2/42584_주식가격.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,40 @@
/*
/*
⭐️ 문제 정보 ⭐️
문제 : 42584 - 주식가격
레벨 : Level 2
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42584
*/

// ANCHOR 2026.04.06 풀이 (15분 소요)
{
function solution(prices) {
// 이거 몇번 푼 문젠데 풀 때마다 헷갈리는듯
// 각 가격이 몇초간 가격이 떨어지지 않았는지를 구하는 문제다;;;
// 스택에다 각 가격이랑 현재 초를 저장해두고 풀면 되겠다.
const stack = [];
const answer = [];

for (let idx = 0; idx < prices.length; idx++) {
let price = prices[idx];
let top = stack.at(-1);
while (top !== undefined && top.price > price) {
answer[top.idx] = idx - top.idx;
stack.pop();
top = stack.at(-1);
}
stack.push({ price, idx });
}

// 남은 가격들 처리
for (let i = 0; i < stack.length; i++) {
const { price, idx } = stack[i];
answer[idx] = prices.length - idx - 1;
}

return answer;
}
}

// ANCHOR 2025.12.03 풀이
function solution3(prices) {
const stack = [];
Expand Down