목차
반응형
문제
https://leetcode.com/problems/number-of-islands/
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을 더한다.
참고한 책 : 파이썬 알고리즘 인터뷰
반응형
'Study > Algorithm' 카테고리의 다른 글
[LeetCode] #46. Permutations (python) (0) | 2022.03.17 |
---|---|
[LeetCode] #17. Letter Combinations of a Phone Number (python) (0) | 2022.03.17 |
[LeetCode] #3. Longest Substring Without Repeating Characters (python) (0) | 2022.03.09 |
[LeetCode] #771. Jewels and Stones (python) (0) | 2022.03.09 |
[LeetCode] #706. Design HashMap (python) (0) | 2022.03.09 |