본문 바로가기
Study/Algorithm

[LeetCode] #200. Number of Islands (python)

by 투말치 2022. 3. 17.

목차

    반응형

    문제

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

     

    Number of Islands - LeetCode

    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

    leetcode.com

    1을 땅, 0은 물을 의미하는 2차원 배열이 주어졌을 때 섬의 개수를 계산해야 한다.

     

    예시 입출력

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

     

     

    풀이

     

    책 풀이

    DFS
    class Solution:
        def numIslands(self, grid: List[List[str]]) -> int:
            def dfs(i, j):
                # 더 이상 땅이 아닌 경우 종료
                if i < 0 or i >= len(grid) or \
                        j < 0 or j >= len(grid[0]) or \
                        grid[i][j] != '1':
                    return
    
                grid[i][j] = 0
    
                # 동서남북 탐색
                dfs(i + 1, j)
                dfs(i - 1, j)
                dfs(i, j + 1)
                dfs(i, j - 1)
    
            count = 0
            for i in range(len(grid)):
                for j in range(len(grid[0])):
                    if grid[i][j] == '1':
                        dfs(i, j)
                        # 모든 육지 탐색 후 카운트 1 증가
                        count += 1
            return count

    dfs 탐색을 하는 dfs 함수가 있다. 탐색 중인 인덱스 범위가 아닌 경우와 해당 값이 1이 아닌 경우, 즉 땅이 아닌 경우에 함수를 종료한다.

    만약 육지라면 해당 지역을 탐색했으니 값을 0으로 변경하고 해당 값의 상하좌우를 확인하기 위해 다시 dfs를 호출한다.

    탐색을 완료했다면 섬을 발견한 것이기 때문에 count에 1을 더한다.

     

    참고한 책 : 파이썬 알고리즘 인터뷰

    반응형