[leetcode / 200] Number of Islands
in Problem Solving on leetcode
날짜: 2021년 8월 30일
카테고리: 그래프
태그: Medium
, 200
, 파이썬
leetcode 200 - Number of Islands
입출력 예시
예제 입력 | 예제 출력 |
---|---|
grid = [[“1”,”1”,”1”,”1”,”0”],[“1”,”1”,”0”,”1”,”0”],[“1”,”1”,”0”,”0”,”0”],[“0”,”0”,”0”,”0”,”0”]] | 1 |
grid = [[“1”,”1”,”0”,”0”,”0”],[“1”,”1”,”0”,”0”,”0”],[“0”,”0”,”1”,”0”,”0”],[“0”,”0”,”0”,”1”,”1”]] | 3 |
코드
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)
count += 1
return count
풀이 과정
함수 내에 dfs
함수 전체를 중첩 함수로 생성
i
나 j
가 전체 지도 범위 밖으로 벗어나거나, 1이 아닌 수가 된다면(섬이 끝나는 부분) return 해버리는 함수 dfs
를
동서남북 사방으로 체크
이중 반복으로 이차원 배열의 모든 원소를 탐색
if grid[i][j] == '1':
구문을 통해 백트래킹의 성향을 띔
하나의 섬을 모두 탐색한 후 count
에 1을 더함
모든 반복이 끝났을 때 count
반환