본문 바로가기
BEB/algorithm

41_countIslands

by ddanss 2022. 12. 22.
728x90

BFS로 풀 수 있는 기본 유형의 문제였다

const countIslands = function (grid) {
  if(grid.length===0) return 0;
  let n = grid.length;
  let m = grid[0].length;
  let vis = Array.from(Array(n), () => Array(m).fill(0)) //방문했는지를 나타내는 2차원배열
  let dx = [0,1,0,-1]; //상하좌우
  let dy = [1,0,-1,0]; //상하좌우
  let Q = []; //큐
  let count = 0; //섬의 개수

  for(let i=0;i<n;i++) {
    for(let j=0;j<m;j++) { //모든 좌표를 다 돌면서
      if(grid[i][j] === '0' || vis[i][j] === 1) continue; //물이나 이미 방문했으면 continue
      count++; //섬을 하나 찾았으므로 count++
      Q.push(i); //x좌표를 큐에 넣음
      Q.push(j); //y좌표를 큐에 넣음
      vis[i][j] = 1; //i,j는 방문했음
      while(Q.length > 0) { //큐에 아무것도 없을떄가지 와일문을 돌림
        let x = Q.shift(); //큐에 있던 x좌표
        let y = Q.shift(); //큐에 있던 y좌표
        for(let k=0;k<4;k++) {
          let cur_x = x + dx[k]; //상하좌우 x좌표
          let cur_y = y + dy[k]; //상하좌우 y좌표
          if(cur_x<0 || cur_x>=n || cur_y<0 || cur_y>=m) continue;
          if(grid[cur_x][cur_y] === '0' || vis[cur_x][cur_y] === 1) continue;
          Q.push(cur_x);
          Q.push(cur_y);
          vis[cur_x][cur_y] = 1;
        }
      }
    }
  }
  return count;
};
반응형

'BEB > algorithm' 카테고리의 다른 글

46_0-1Knapsack  (0) 2023.01.15
45_subsetSum  (0) 2023.01.09
40_longestPalindrome 가장긴 팰린드롬  (0) 2022.12.20
38_decompression  (0) 2022.12.16
37_coinChange  (0) 2022.12.15

댓글