๐Ÿ”ข Algorithm

[Javascript][Programmers] ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ ๊ฒŒ์ž„

์œค๋„๊ธฐ 2024. 8. 5. 15:00
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ

  • ์Œ“์—ฌ์žˆ๋‹ค → ์Šคํƒ

 

๋‚˜์˜ ํ’€์ด

function solution(board, moves) {
    let answer = 0;
    const size = board.length;
    const basket = [];
    let picked = -1;

    for(const move of moves) {
        for(let i = 0; i < size; i++) {
            if(board[i][move - 1] === 0) continue;
            else {
                picked = board[i][move - 1];
                board[i][move - 1] = 0;
                if(basket[basket.length - 1] === picked) {
                    basket.pop();
                    answer = answer += 2;
                } else {
                    basket.push(picked);
                }
                break;
            }
        }
    }

    return answer;
}

๊ฐ ๋™์ž‘๋งˆ๋‹ค ๋ณด๋“œ์˜ ํ•ด๋‹น ์—ด์„ ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•ด ์ธํ˜•์„ ์ฐพ๊ณ , ์ฐพ์€ ์ธํ˜•์„ ๋ฐ”๊ตฌ๋‹ˆ(basket)์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฐ”๊ตฌ๋‹ˆ์˜ ๋งˆ์ง€๋ง‰ ์ธํ˜•๊ณผ ์ƒˆ๋กœ ๋„ฃ์„ ์ธํ˜•์ด ๊ฐ™์œผ๋ฉด ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์ œ๊ฑฐํ•˜๊ณ , ์ œ๊ฑฐ๋œ ์ธํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ answer์— 2์”ฉ ๋”ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌธ์ œ์ 

  • ๋ณด๋“œ์˜ ํ•ด๋‹น ์—ด์„ ์œ„์—์„œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ณผ์ •์ด ์ค‘๋ณตํ•ด์„œ ๋ฐœ์ƒ → ๋ณด๋“œ๋ฅผ ์Šคํƒ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

 

๋‹ค๋ฅธ ํ’€์ด

function solution(board, moves) {
  // โžŠ ๊ฐ ์—ด์— ๋Œ€ํ•œ ์Šคํƒ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. [[], [], [], [], []]
  const lanes = [...new Array(board[0].length)].map(() => []);

  // โž‹ board๋ฅผ ์—ญ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋ฉฐ, ๊ฐ ์—ด์˜ ์ธํ˜•์„ lanes์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  for (let i = board.length - 1; i >= 0; i--) {
    for (let j = 0; j < board[0].length; j++) {
      if (board[i][j]) {
        lanes[j].push(board[i][j]);
      }
    }
  }

  // โžŒ ์ธํ˜•์„ ๋‹ด์„ bucket์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  const bucket = [];

  // โž ์‚ฌ๋ผ์ง„ ์ธํ˜•์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  let answer = 0;

  // โžŽ moves๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ, ๊ฐ ์—ด์—์„œ ์ธํ˜•์„ ๋ฝ‘์•„ bucket์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  for (const m of moves) {
    if (lanes[m - 1].length > 0) {
      // ํ•ด๋‹น ์—ด์— ์ธํ˜•์ด ์žˆ๋Š” ๊ฒฝ์šฐ
      const doll = lanes[m - 1].pop();

      if (bucket.length > 0 && bucket[bucket.length - 1] === doll) {
        // โž ๋ฐ”๊ตฌ๋‹ˆ์— ์ธํ˜•์ด ์žˆ๊ณ , ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ
        bucket.pop();
        answer += 2;
      } else {
        // โž ๋ฐ”๊ตฌ๋‹ˆ์— ์ธํ˜•์ด ์—†๊ฑฐ๋‚˜, ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ธํ˜•๊ณผ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
        bucket.push(doll);
      }
    }
  }

  return answer;
}

 


Reference

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ•ฉ๊ฒฉ์ž ๋˜๊ธฐ: ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŽธ

๋ฐ˜์‘ํ˜•