Algorithm/์ธํ”„๋Ÿฐ(inflearn)

[JavaScript/section 6] 03 - ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ(์นด์นด์˜ค ๊ธฐ์ถœ)

_์„ฑํ˜ธ_ 2022. 9. 25. 12:47
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ 03 - ํฌ๋ ˆ์ธ ์ธํ˜•๋ฝ‘๊ธฐ(์นด์นด์˜ค ๊ธฐ์ถœ)

์ฒ˜์Œ ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์ž˜๋ชปํ•˜์—ฌ ํ’€์ด๊ฐ€ ์™„๋ฒฝํ•˜์ง„ ์•Š์•˜๋‹ค..๐Ÿ˜‚ ๋‹ค์Œ์— 2์ฐจ์› ๋ฐฐ์—ด ๋ฌธ์ œ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ row, column์— ๋Œ€ํ•œ ์ธ์‹์„ ์ œ๋Œ€๋กœํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด ์ด๋Ÿฌํ•œ ์‹ค์ˆ˜๋Š” ๋ง‰์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์ง‘๊ฒŒ๋กœ ์ธํ˜•์„ ๋ฝ‘๊ณ  ๋‚œ ์ดํ›„์— ํ•ด๋‹น ๊ฐ’์„ 0(๋นˆ ์นธ์„ ์˜๋ฏธ)์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ๋„ ์žŠ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ํ’€์ด ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

ํ’€์ด ๋ฐฉ๋ฒ•

  • moves ๋ฐฐ์—ด์„ ์ฐจ๋ก€๋Œ€๋กœ ๋Œ๋ฉฐ ์ง‘๊ฒŒ๊ฐ€ ์œ„์น˜ํ•ด์•ผ ํ•  ๊ณณ(pos)์„ ์ฐพ๋Š”๋‹ค. 
  • ์ง‘๊ฒŒ๊ฐ€ ๋‚ด๋ ค์˜ค๋Š” column์— 0(๋นˆ ์นธ)์ด ์•„๋‹Œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ์ธํ˜•์„ ๋ฝ‘๊ณ (tmp) ์ธํ˜•์ด ์žˆ๋˜ ์ž๋ฆฌ์˜ ๊ฐ’์„ 0์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.
  • ํ˜„์žฌ ์ง‘๊ฒŒ์˜ ๊ฐ’(tmp)๊ณผ ๋ฐ”๊ตฌ๋‹ˆ ๋งˆ์ง€๋ง‰ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด pop() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ๊ฐ’์„ ๊บผ๋‚ธ ํ›„ answer += 2๋ฅผ ํ•ด์ค€๋‹ค.
  • ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ํ˜„์žฌ ์ง‘๊ฒŒ์˜ ๊ฐ’์„ push() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๋ฐ”๊ตฌ๋‹ˆ์— ๋„ฃ์–ด์ค€๋‹ค.
  • for ๋ฌธ์„ ๋น ์ ธ๋‚˜์™€ ์ง‘๊ฒŒ๊ฐ€ ๋‹ค์Œ์— ์œ„์น˜ํ•ด์•ผ ํ•  ๊ณณ(pos)๋ฅผ ์ฐพ๋Š”๋‹ค.

 

๐Ÿ“ ํ’€์ด

function solution(board, moves) {
  let answer = 0;
  let stack = [];

  moves.forEach((pos) => {
    let index = stack.length - 1;

    for (let i = 0; i < board.length; i++) {
      if (board[i][pos - 1] !== 0) {
        let tmp = board[i][pos - 1];
        board[i][pos - 1] = 0;

        if (tmp === stack[index]) {
          stack.pop();
          answer += 2;
        } else {
          stack.push(tmp);
        }
        break;
      }
    }
  });

  return answer;
}

let a = [
  [0, 0, 0, 0, 0],
  [0, 0, 1, 0, 3],
  [0, 2, 5, 0, 1],
  [4, 2, 4, 4, 2],
  [3, 5, 1, 3, 1],
];

let b = [1, 5, 3, 5, 1, 2, 1, 4];
console.log(solution(a, b));