import sys
sys.setrecursionlimit(10**6)
def solution(maps):
maps = [list(map) for map in maps]
def dfs(y, x):
if y < 0 or y >= len(maps) or x < 0 or x >= len(maps[0]) or maps[y][x] == 'X':
return 0
ret = int(maps[y][x])
maps[y][x] = 'X'
ret += dfs(y-1, x)
ret += dfs(y+1, x)
ret += dfs(y, x-1)
ret += dfs(y, x+1)
return ret
ret = []
for i in range(len(maps)):
for j in range(len(maps[0])):
food = dfs(i, j)
if food != 0: ret.append(food)
if len(ret) == 0 : return [-1]
return sorted(ret)
전형적인 dfs 문제이므로 어렵지 않았다.
모든 좌표를 순회하며 값이 있으면 dfs로 연결된 섬의 값을 모두 더하며, 한번 방문했으면 'X' 로 만든다.