N

(Leet Code JS)Max Area of Island 본문

Leet Code 알고리즘

(Leet Code JS)Max Area of Island

naeunchan 2022. 3. 7. 10:26
728x90
반응형

https://leetcode.com/problems/max-area-of-island/

 

Max Area of Island - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

BFS 탐색 이용.

 

m x n 크기의 visited 배열을 false로 초기화.

4방향 탐색을 위한 direct 배열도 선언.

answer = 탐색한 area 중 가장 큰 값을 저장한다.

 

bfs 함수는 x, y 값을 매개 변수로 받으며,

이 값을 통해 인접한 4방향 중 1로 된 영역의 크기를 구한다.

 

for문을 통해 grid를 순회하며 1로 된 영역이면서 방문하지 않은 좌표가 있다면 해당 좌표를 bfs의 매개변수로 넘겨주어 answer 값을 갱신하도록 한다.

const maxAreaOfIsland = (grid) => {
    const m = grid.length;
    const n = grid[0].length;
    const visited = Array.from({length: m}, () => Array(n).fill(false));
    const direct = [[-1, 0], [1, 0], [0, -1], [0, 1]];
    let answer = 0;
    
    const bfs = (sx, sy) => {
        const queue = [];
        let area = 1;
        
        queue.push([sx, sy]);
        visited[sx][sy] = true;
        
        while(queue.length){
            const [x, y] = queue.shift();

            for(let k = 0; k < 4; k++){
                const nx = x + direct[k][0];
                const ny = y + direct[k][1];

                if(nx >= 0 && nx < m && ny >= 0 && ny < n && grid[nx][ny] && !visited[nx][ny]){
                    area++;
                    queue.push([nx, ny]);
                    visited[nx][ny] = true;
                }
            }

            answer = answer < area ? area : answer;
        }
    }
    
    for(let i = 0; i < m; i++){
        for(let j = 0; j < n; j++){
            if(grid[i][j] && !visited[i][j]){
                bfs(i, j);
            }
        }
    }
    
    return answer;
};
728x90
반응형