from collections import deque
def bfs(maps, start) :
sum = 0
move = [(-1,0),(1,0),(0,1),(0,-1)]
queue = deque([start])
visited[start[0]][start[1]] = True
while queue :
vy, vx = queue.popleft()
sum += int(maps[vy][vx])
for i in move :
y, x = vy + i[0], vx + i[1]
if y >= 0 and x >= 0 and y < max_y and x < max_x :
if maps[y][x] != 'X' and visited[y][x] == False :
visited[y][x] = True
queue.append((y,x))
return sum
def solution(maps):
global visited, max_y, max_x
max_y, max_x = len(maps), len(maps[0])
visited = [[False] * len(i) for i in maps]
maps = list(map(lambda x:list(x), maps))
answer = []
for i in range(max_y) :
for j in range(max_x) :
if visited[i][j] == False and maps[i][j] != 'X' :
answer.append(bfs(maps, (i,j)))
if answer : answer.sort()
else : answer = [-1]
return answer
문제정리
격자 형태의 지도가 존재하는데 상,하,좌,우로 연결되어있는 땅들은 모두 같은 무인도로 인식한다.
연결되어있는 무인도의 숫자는 식량은 최대 며칠동안 머물 수 있는지를 나타냅니다.
각 섬에서 최대 며칠씩 머물 수 있는지 알아본 후 놀러갈 섬을 결정하려 합니다.
며칠씩 머물 수 있는지 정렬된 배열로 리턴하시오
풀이과정
dfs나 bfs로 네트워크를 확인할 경우 쉽게 풀 수 있을 것이라고 생각하였다.
다만 두개다 익숙하지않아서 스피닛을 참고하며 코딩하였다.
비슷한 문제를 많이 풀어봐야겠다.
해당문제는 bfs를 이용하여 풀었다.
다른 bfs와 다른점은 지도이므로 2차원 배열이란 것 빼면 비슷한것 같다.
풀이 후
좀더 깔끔하게 bfs를 짠사람이 있나 했는데 다들 비슷한거같다
bfs나 dfs나 코드가 길어지고 지저분해보이는 것은 어쩔 수 없는 것같다.