bfs
함수는 주어진 시작 좌표에서 상하좌우로 연결된 모든 '1'을 찾아 '0'으로 바꿈
queue를 사용하여 BFS를 구현
이중 for문을 사용하여 grid
배열의 각 요소를 확인
만약 현재 위치의 값이 '1'이면, 새로운 섬을 발견한 것이므로 count
를 증가시키고,
bfs
함수를 호출하여 현재 위치에서 연결된 모든 '1'을 '0'으로 바꾼다
BFS 함수에서는 시작 위치를 큐에 넣고, 큐가 빌 때까지 반복한다
큐에서 좌표를 하나 꺼내서 현재 위치가 유효하면(배열의 범위 내에 있고, 값이 '1'인 경우),
해당 위치를 '0'으로 바꾸고, 상하좌우의 인접한 위치를 큐에 추가
마지막으로 섬의 개수를 반환
이렇게 BFS랑 Graph를 이용해서 문제를 풀 수 있다
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
if (!grid || grid.length === 0) {
return 0;
}
const rows = grid.length;
const cols = grid[0].length;
let count = 0;
const bfs = (r, c) => {
const queue = [[r, c]];
while (queue.length > 0) {
const [row, col] = queue.shift();
if (row >= 0 && row < rows && col >= 0 && col < cols && grid[row][col] === '1') {
grid[row][col] = '0'; // 방문한 것으로 표시
queue.push([row + 1, col], [row - 1, col], [row, col + 1], [row, col - 1]);
}
}
};
for (let i = 0; i < rows; i++) {
for (let j = 0; j < cols; j++) {
if (grid[i][j] === '1') {
count++;
bfs(i, j);
}
}
}
return count;
};