새소식

Algorithm/LeetCode

[LeetCode] 200. Number of Islands

  • -
728x90

Medium

Given an m x n 2d grid 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 lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

 

 

Example 1:

Input: grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ]

Output: 1

 

 

Example 2:

Input: grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ]

Output: 3

 

 

나의 코드

import numpy as np

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        num = 0
        h, w = len(grid), len(grid[0])
        visited = np.zeros((h, w), bool)
        for i in range(h):
            for j in range(w):
                if not visited[i, j]:
                    if grid[i][j] == "1":
                        dfs(grid, visited, (i, j))  # 좌표를 튜플로 저장
                        num += 1

        return num

    
def bfs(grid, visited, start):
    h, w = len(grid), len(grid[0])
    q = [start]
        
    dx = [1, 0, -1, 0]
    dy = [0, 1, 0, -1]
    while len(q) > 0:
        e = q.pop()
        visited[e] = True
        
        for k in range(len(dx)):
            nx, ny = (e[0] + dx[k]), (e[1] + dy[k])
            if (0 <= nx < h and 0 <= ny < w) and (grid[nx][ny] == "1") and (not visited[nx, ny]):
                q.append((nx, ny))
  • BFS로 해결
  • 방문하지 않은 and "1"인 좌표에 대해 깊이 탐색을 수행
  • 깊이 탐색을 수행할 때마다 섬의 개수 += 1 # num
  • dx, dy를 이용 → 좌표 용이
  • dfs 함수: start 좌표의 4-neighbors를 방문하면서 "1"인 grid 좌표 탐색 ▷ 찾은 좌표에 대해 다시 방문 및 탐색

 

 

- medium...까지는 아닌 듯하다.

 

728x90

'Algorithm > LeetCode' 카테고리의 다른 글

[LeetCode] 17. Letter Combinations of a Phone Number  (0) 2020.12.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.