import sys
from collections import deque
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
answer = []
while True:
flag = False
L, R, C = map(int, sys.stdin.readline().rstrip().split())
if L == 0 and R == 0 and C == 0:
break
graph = []
for i in range(L):
temp = [list(sys.stdin.readline().rstrip()) for _ in range(R)]
graph.append(temp)
sys.stdin.readline()
for i in range(L):
for j in range(R):
for k in range(C):
if graph[i][j][k] == 'S':
start = (i, j, k) # (z, x, y)
graph[i][j][k] = 0
q = deque()
q.append(start)
while q:
z, x, y = q.popleft()
# 바로 탈출하여 최단거리 보장
if flag:
break
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0 <= nz < L and 0 <= nx < R and 0 <= ny < C:
if graph[nz][nx][ny] == '.':
graph[nz][nx][ny] = graph[z][x][y] + 1
q.append((nz, nx, ny))
elif graph[nz][nx][ny] == 'E':
flag = True
add = f'Escaped in {graph[z][x][y] + 1} minute(s).'
answer.append(add)
if not flag:
answer.append('Trapped!')
for i in answer:
print(i)
기존에 자주 등장한 2차원 배열에서 z축을 추가한 문제이다.
[백준 5427번] 불 문제처럼 최단거리 값을 찾으면 즉시 while
문을 탈출해야 최단거리가 계속 갱신되지 않는다.
BFS 특성상 처음 만나게 되는 답만 최단/최적의 값을 보장한다. 이 점을 까먹지 말고 답을 찾으면 즉시 while
문을 탈출하자.