Max Area of Island

HeeSeong·2021년 8월 31일
0

LeetCode

목록 보기
26/38
post-thumbnail

🔗 문제 링크

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


🔍 문제 설명



You are given an m x n binary matrix grid. An island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water.

The area of an island is the number of cells with a value 1 in the island.

Return the maximum area of an island in grid. If there is no island, return 0.


⚠️ 제한사항


  • m=grid.lengthm = grid.length

  • n=grid[i].lengthn = grid[i].length

  • 1<=m,n<=501 <= m, n <= 50

  • grid[i][j]grid[i][j] is either 0 or 1.



🗝 풀이 (언어 : Java)


앞에서 푼 섬의 개수 문제의 면적 구하기 버전이다. 가장 안쪽 마지막 0인 땅에서 0+1이 반환되어 재귀적으로 +1씩 쌓여 마지막엔 해당 함수를 호출한 시작점의 소속 섬의 총면적을 반환한다. 그리고 최대값과 비교하여 최대값을 갱신한다.

class Solution {
    // 전체 2차원 배열의 가로, 세로, 해당 지점 방문 여부
    private int ver, hor;
    private boolean[][] visited;

    // dfs로 해당 섬의 면적을 반환
    private int dfs(int[][] grid, int i, int j) {
        // 지정된 범위를 넘거나, 물이거나, 이미 체크한 지점인 경우 +0
        if (i < 0 || i >= ver || j < 0 || j >= hor || grid[i][j] == 0 || visited[i][j] == true)
            return 0;
        // 방문 체크
        visited[i][j] = true;
        // 상하좌우 체크 + 현재 지점 = 전체 면적
        return dfs(grid, i - 1, j) + dfs(grid, i + 1, j) + dfs(grid, i, j - 1) + dfs(grid, i, j + 1) + 1;
    }

    public int maxAreaOfIsland(int[][] grid) {
        // 받은 2차원 배열의 정보로 가로, 세로, 해당 지점 방문 여부 세팅
        ver = grid.length;
        hor = grid[0].length;
        visited = new boolean[ver][hor];
        int max = 0;
        for (int i = 0; i < ver; i++) {
            for (int j = 0; j < hor; j++) {
                if (grid[i][j] == 1 && visited[i][j] == false)
                    // 나온 해당 섬의 전체 면적을 최대값과 비교해 갱신
                    max = Math.max(dfs(grid, i, j), max);
            }
        }
        return max;
    }
}
profile
끊임없이 성장하고 싶은 개발자

0개의 댓글