Leetcode 200. Number of Islands

siwoo jang·2024년 1월 29일
0

  • 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;
};
profile
프론트/백엔드 개발자입니다

0개의 댓글