๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿง  ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋ฌด์ธ๋„ ์—ฌํ–‰ JS

by megan07 2024. 1. 6.


๋ฌธ์ œ๋งํฌ

์ „ํ˜•์ ์ธ BFS๋ฌธ์ œ


๋ชจ๋“  ์›์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฌด์ธ๋„๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ 
ํ•˜๋‚˜์˜ ๋ฌด์ธ๋„๋ฅผ ๋ฐœ๊ฒฌํ•  ๋•Œ๋งˆ๋‹ค bfs๋ฅผ ํ†ตํ•ด
ํ•ด๋‹น ๋ฌด์ธ๋„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‹๋Ÿ‰์˜ ์ˆ˜๋ฅผ ๋”ํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค

๋ฐฉ๋ฌธํ•œ ๋ฌด์ธ๋„์˜ ์›์†Œ๋Š” X๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์คฌ์Šต๋‹ˆ๋‹ค

function solution(maps) {
  //bfs ์™„์ „ ํƒ์ƒ‰

  const q = [];
  const result = [];
  const r_length = maps.length;
  const c_length = maps[0].length;

  const dr = [0, 0, -1, 1];
  const dc = [1, -1, 0, 0];

  //๋ฌธ์ž์—ด์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
  for (let r = 0; r < r_length; r++) {
    maps[r] = maps[r].split('');
  }

  //maps์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋Œ๋ฉด์„œ bfsํƒ์ƒ‰
  for (let r = 0; r < r_length; r++) {
    for (let c = 0; c < c_length; c++) {
      //๋ฌด์ธ๋„๋ฅผ ์ฐพ์œผ๋ฉด
      if (maps[r][c] === 'X') continue;

      //bfs ํƒ์ƒ‰์„ ํ†ตํ•ด ํ˜„์žฌ ๋ฌด์ธ๋„๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์‹๋Ÿ‰์˜ ํ•ฉ์„ ๊ตฌํ•จ
      let sum = 0;
      sum += Number(maps[r][c]);
      maps[r][c] = 'X';
      q.push([r, c]);

      while (q.length) {
        const [current_r, current_c] = q.shift();
        for (let i = 0; i < 4; i++) {
          const next_r = current_r + dr[i];
          const next_c = current_c + dc[i];

          if (
            next_r >= 0 &&
            next_r < r_length &&
            next_c >= 0 &&
            next_c < c_length &&
            maps[next_r][next_c] !== 'X'
          ) {
            const val = Number(maps[next_r][next_c]);
            maps[next_r][next_c] = 'X';
            sum += val;
            q.push([next_r, next_c]);
          }
        }
      }

      //ํ•˜๋‚˜์˜ ๋ฌด์ธ๋„์— ์žˆ๋Š” ์‹๋Ÿ‰ ์ˆ˜ result์— ํ‘ธ์‰ฌ
      result.push(sum);
    }
  }

  return result.length ? result.sort((a, b) => a - b) : [-1];
}