이것저것

[LeetCode] 200. Number of Islands

문자메일 2022. 3. 18. 04:24

import collections

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        visit  =  [ [False] *len(grid[0])  for i in range(len(grid))]
        cnt = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if visit[i][j] == False and grid[i][j]=="1":
                    self.bfs(i,j,grid, visit, cnt)
                    cnt = cnt+1

        return cnt
            
    def bfs(self,i,j, grid,visit, cnt):
        
        direction = [(-1,0), (1,0), (0,1), (0,-1)]
        
        visit[i][j] == True
        
        queue = collections.deque()
        queue.append((i,j))
        
        while queue:
            x,y = queue.popleft()
            
            
            for dx,dy in direction:
                nx, ny = x+dx, y+dy
                
                if nx<0 or ny <0 or nx>=len(grid) or ny>=len(grid[i]):
                    continue
                
                if visit[nx][ny] == False and grid[nx][ny] == "1":
                    visit[nx][ny] = True
                    queue.append((nx,ny))