알고리즘

[LeetCode] 695. Max Area of Island

유병각 2022. 5. 28. 22:47

[LeetCode] Max Area of Island

이 문제는 dfs 를 활용해서 풀 수 있는 문제이다.

dfs 는 depth first search 의 약자로서, 그래프 탐색 알고리즘의 한 종류이다.

이름에서 알 수 있듯이 노드에서 연결된 노드가 있으면 계속 연결된 부분을 통해 이동하면서 그래프를 탐색한다.

dfs 는 운이 좋을 경우 해를 빠르게 구할 수 있지만, 항상 최적의 해를 보장하지는 않는다.

또한 dfs 는 스택 자료구조를 사용하며 구현할 수 있다. (재귀의 동작이 스택과 똑같음)

해가 없는 경로에 깊게 빠질 수 있다. 따라서 예외처리를 잘 해주어야한다.

class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        n = len(grid)
        m = len(grid[0])
        
        def dfs(r,c):
            nonlocal count
            if (r < 0 or r >= n or c < 0 or c >= m or grid[r][c] == 0):
                return ;
            
            if (grid[r][c] == 1):
                count += 1
                grid[r][c] = 0;
            
            dfs(r+1,c)
            dfs(r-1,c)
            dfs(r,c+1)
            dfs(r,c-1)
        
        ret = 0;
        
        for i in range(n):
            for k in range(m):
                if (grid[i][k] == 1):
                    count = 0;
                    dfs(i,k)
                    ret = max(count, ret);
        return ret