Python : 토마토 2 (BFS)
문제
풀이
- 기존 토마토 문제에서 위 아래로 틀을 여러겹 쌓아 탐색의 범위를 넓힌 문제이다.
- 좌표평면 탐색을 dx, dy, dz 로 총 6방향으로 탐색하면 토마토1 과 다를게 없다!
- 2차평면에 비해서 탐색해야할게 많아서 입력값을 input에서 sys.stdin.readline으로 바꿔야 한다.
전체코드
import sys
from collections import deque
r = sys.stdin.readline
def bfs():
while queue:
height, line, seq = queue.popleft()
for i in range(6):
# 다음 높이
a = height + dz[i]
# 다음 줄
b = line + dy[i]
# 다음 칸
c = seq + dx[i]
if 0 <= a < h and 0 <= b < n and 0 <= c < m and graph[a][b][c] == 0:
queue.append([a, b, c])
graph[a][b][c] = graph[height][line][seq] + 1
day = 0
for i in graph:
for j in i:
for k in j:
if k == 0:
return -1
# 끝까지 익었는지 확인
day = max(day, max(j))
return day - 1
if __name__ == '__main__':
dx = [1, 0, 0, -1, 0, 0]
dy = [0, 1, 0, 0, -1, 0]
dz = [0, 0, 1, 0, 0, -1]
queue = deque()
m, n, h = map(int, r().split())
graph = list(list(list(map(int, r().split())) for _ in range(n)) for _ in range(h))
# 몇 층?
for height in range(len(graph)):
# 몇 번째 줄?
for line in range(len(graph[height])):
# 몇 번째 칸?
for seq in range(len(graph[height][line])):
if graph[height][line][seq] == 1:
queue.append([height, line, seq])
print(bfs())
Author And Source
이 문제에 관하여(Python : 토마토 2 (BFS)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@donsco/Python-토마토-2-BFS저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)