countIslands

2020. 11. 20. 00:20알고리즘

  • R x M 의 2차원 배열인 grid가 주어졌을 때, '1'은 땅을 의미하고 '0' 은 물을 의미합니다. 주어진 2차원 배열에 존재하는 섬의 개수를 리턴해야 합니다.
const countIslands = function (grid) {
  // TODO: 여기에 코드를 작성합니다.
  const HEIGHT = grid.length;
  const WIDTH = HEIGHT && grid[0].length;
  let count = 0;

  for (let row = 0; row < HEIGHT; row++) {
    for (let col = 0; col < WIDTH; col++) {
      if (grid[row][col] === '0') continue;
      count++;
      searchIsland(row, col);
    }
  }
// 1이 걸릴 경우 1과 연결될 수 있는 땅들을 다 물로 바꿔서 섬 자체를 없애고 다시 찾는다 그러면 자연스럽게 섬들만 카운트 할 수 있지
  function searchIsland(row, col) {
    if (row < 0 || col < 0 || row >= HEIGHT || col >= WIDTH) return;
    if (grid[row][col] === '0') return;

    grid[row][col] = '0';
    searchIsland(row - 1, col);
    searchIsland(row + 1, col);
    searchIsland(row, col - 1);
    searchIsland(row, col + 1);
  }

  return count;
};