diff --git "a/Programmers/Level1/64061_\355\201\254\353\240\210\354\235\270_\354\235\270\355\230\225\353\275\221\352\270\260_\352\262\214\354\236\204.js" "b/Programmers/Level1/64061_\355\201\254\353\240\210\354\235\270_\354\235\270\355\230\225\353\275\221\352\270\260_\352\262\214\354\236\204.js" index 85bbbd8..5995c98 100644 --- "a/Programmers/Level1/64061_\355\201\254\353\240\210\354\235\270_\354\235\270\355\230\225\353\275\221\352\270\260_\352\262\214\354\236\204.js" +++ "b/Programmers/Level1/64061_\355\201\254\353\240\210\354\235\270_\354\235\270\355\230\225\353\275\221\352\270\260_\352\262\214\354\236\204.js" @@ -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()); diff --git "a/Programmers/Level2/12973_\354\247\235\354\247\200\354\226\264_\354\240\234\352\261\260\355\225\230\352\270\260.js" "b/Programmers/Level2/12973_\354\247\235\354\247\200\354\226\264_\354\240\234\352\261\260\355\225\230\352\270\260.js" index 2f2ce5b..fa52b48 100644 --- "a/Programmers/Level2/12973_\354\247\235\354\247\200\354\226\264_\354\240\234\352\261\260\355\225\230\352\270\260.js" +++ "b/Programmers/Level2/12973_\354\247\235\354\247\200\354\226\264_\354\240\234\352\261\260\355\225\230\352\270\260.js" @@ -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 = []; diff --git "a/Programmers/Level2/42584_\354\243\274\354\213\235\352\260\200\352\262\251.js" "b/Programmers/Level2/42584_\354\243\274\354\213\235\352\260\200\352\262\251.js" index 9deac04..eff0bd4 100644 --- "a/Programmers/Level2/42584_\354\243\274\354\213\235\352\260\200\352\262\251.js" +++ "b/Programmers/Level2/42584_\354\243\274\354\213\235\352\260\200\352\262\251.js" @@ -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 = [];