NumberOfClosedIslands
Published at 2021-11-05
class Solution:
def closedIsland(self, grid: List[List[int]]) -> int:
rowLen = len(grid)
colLen = len(grid[0])
cnt = 0
def isLand(i, j):
if 0 > i or i >= rowLen or 0 > j or j >= colLen: return False
if grid[i][j] == -2:
return False
if grid[i][j] == -1:
return True
if grid[i][j] == 0:
if 0 == i or i == rowLen - 1 or 0 == j or j == colLen - 1: return False
grid[i][j] = -1
if not isLand(i - 1, j):
grid[i][j] = -2
return False
if not isLand(i, j - 1):
grid[i][j] = -2
return False
if not isLand(i + 1, j):
grid[i][j] = -2
return False
if not isLand(i, j + 1):
grid[i][j] = -2
return False
return True
for i in range(1, rowLen - 1):
for j in range(1, colLen - 1):
if grid[i][j] == 0:
if isLand(i, j):
grid[i][j] = -1
cnt += 1
return cnt
# 일단 붙어있는 0의 갯수를 셈
# 세면서 0이 가생이에 있는 경우면 갯수세기 취소
# 유효한 섬으로 확인됨 : -1 유효하지않은 섬으로 확인됨 : -2