https://leetcode.com/problems/number-of-islands/description/

 

Number of Islands - LeetCode

Can you solve this real interview question? Number of Islands - Given an m x n 2D binary grid grid which represents a map of '1's (land) and '0's (water), return the number of islands. An island is surrounded by water and is formed by connecting adjacent l

leetcode.com

 

간단한 그래프 탐색 문제다.

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        newgrid = [x[:] for x in grid]
        answer = 0

        dx = [0, 0, 1, -1]
        dy = [1, -1, 0, 0]
        def dfs(i, j):
            if i >= 0 and j >= 0 and i < len(newgrid) and j < len(newgrid[0]):
                if newgrid[i][j] == '1':
                    newgrid[i][j] = '0'

                    dfs(i + 1, j)
                    dfs(i - 1, j)
                    dfs(i, j + 1)
                    dfs(i, j - 1)
        
        for i in range(len(newgrid)):
            for j in range(len(newgrid[0])):
                if newgrid[i][j] == '1':
                    answer += 1
                    dfs(i, j)

        return answer

 

다른사람의 솔루션을 봤는데 숏코딩이 기가맥히다.

def numIslands(self, grid):
    def sink(i, j):
        if 0 <= i < len(grid) and 0 <= j < len(grid[i]) and grid[i][j] == '1':
            grid[i][j] = '0'
            map(sink, (i+1, i-1, i, i), (j, j, j+1, j-1))
            return 1
        return 0
    return sum(sink(i, j) for i in range(len(grid)) for j in range(len(grid[i])))

+ Recent posts