본문 바로가기
코드

Number of Islands

by ehei 2019. 11. 4.

행렬에 있는 1의 뭉치를 세는 문제. 너비 우선 탐색을 쓰면 쉽게 해결된다

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

 

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        visited = set()
        count = 0
        rowCount = len( grid )
        
        if not rowCount:
            return 0
        
        columnCount = len( grid[ 0 ] )
        
        if not columnCount:
            return 0
        
        for row, rowList in enumerate( grid ):
            for column, v in enumerate( rowList ):
                if v == '1':
                    if self.__paint( grid, row, column, visited, rowCount, columnCount ):
                        count += 1
                        
        return count
                        
    
    def __paint( self, grid, row, column, visited, rowCount, columnCount ):
        if ( row, column ) in visited:
            return False
        
        visited.add( ( row, column ) )
        offsets = ( ( row - 1, column ), ( row + 1, column ), ( row, column - 1 ), ( row, column + 1 ) )
        
        for offset in offsets:
            if offset not in visited:
                row, column = offset
                
                if 0 <= row < rowCount:
                    if 0 <= column < columnCount:
                        v = grid[ row ][ column ]
                        
                        if v == '1':
                            self.__paint( grid, row, column, visited, rowCount, columnCount )
        
        return True

 

 

'코드' 카테고리의 다른 글

Perfect Squares  (0) 2019.11.25
Open the Lock  (0) 2019.11.04
Design Circular Queue  (0) 2019.11.01
Unique Binary Search Trees II  (0) 2019.10.25
K-th Symbol in Grammar  (0) 2019.10.24