알고리즘

[LeetCode] 1254. Number of Closed Islands

유병각 2022. 5. 29. 15:47
class Solution:
    def closedIsland(self, grid: List[List[int]]) -> int:
        n = len(grid)
        m = len(grid[0])
        
        if (n <= 2 or m <= 2):
            return 0
        
        def dfs(r,c):
            nonlocal res;
            if (r < 0 or r >= n or c < 0 or c >= m or grid[r][c] == 1):
                return ;
            
            if ((r == 0 or r == n - 1 or c  == 0 or c == m - 1) and grid[r][c] == 0):
                res = False;

            
            
            grid[r][c] = 1;
            
            dfs(r+1,c)
            dfs(r-1,c)
            dfs(r,c+1)
            dfs(r,c-1)

        cnt = 0;
        for i in range(n):
            for k in range(m):
                if (grid[i][k] == 0):
                    res = True;
                    dfs(i,k);
                    if (res):
                        cnt += 1;
        return cnt