반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

멋진 개발자가 되고 싶다

[LeetCode/Python] 200. 섬의 개수(Number of Islands) 본문

Algorithm Study/leetcode

[LeetCode/Python] 200. 섬의 개수(Number of Islands)

오패산개구리 2021. 7. 24. 16:41
728x90
반응형

1을 육지로, 0을 물로 가정한 2D 그리드 맵이 주어졌을 때, 섬의 개수를 계산하라.

(연결되어 있는 1의 덩어리의 개수를 구하라.)

 

Example:

 

Input: grid =

[ ["1", "1", "1", "1", "0"],

["1", "1", "0", "1", "0"],

["1", "1", "0", "0", "0"],

["0", "0", "0", "0", "0"] ]

 

Output: 1

 

 

 

** 깔끔한 답안 **

 

 

 

1. DFS로 그래프 탐색

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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, j - 1)
            dfs(i + 1, j)
            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
 
cs

 

 

해설:

 

그래프 모양은 아니지만 그래프 형으로 변환하여 풀 수 있는 문제이다.

 

동서남북이 모두 연결된 그래프라 가정하고 육지가 아니면 return을 이용하여 빠져나온다.

 

이 코드에서는 grid를 dfs 함수에서도 바로 쓸 수 있게 하기 위해 함수를 중첩하였다.

728x90
반응형