이번 문제는 BFS를 통해 해결하였다. 일반적인 문제와 다른점은 3차원으로 탐색을 해야 한다는 점이었다. 이를 위해 6가지 방향에 대한 리스트를 3개 만들어 모든 방향을 탐색할 수 있도록 하였고, BFS방식으로 모든 좌표를 탐색하며 답을 구하였다.
from collections import deque
def bfs(sz, sy, sx):
q = deque()
q.append((sz, sy, sx, 0))
visited = [[[False for _ in range(c)] for _ in range(r)] for _ in range(l)]
visited[sz][sy][sx] = True
while q:
z, y, x, time = q.popleft()
if (z, y, x) == (ez, ey, ex):
return time
for i in range(6):
nz, ny, nx = z+dz[i], y+dy[i], x+dx[i]
if 0 <= nz < l and 0 <= ny < r and 0 <= nx < c and grid[nz][ny][nx] != '#' and not visited[nz][ny][nx]:
visited[nz][ny][nx] = True
q.append((nz, ny, nx, time+1))
return -1
while True:
l, r, c = map(int, input().split())
if (l, r, c) == (0, 0, 0):
break
grid = []
for _ in range(l):
tmp = [list(str(input())) for _ in range(r)]
grid.append(tmp)
tmp1 = input()
sz, sy, sx = 0, 0, 0
ez, ey, ex = 0, 0, 0
for i in range(l):
for j in range(r):
for k in range(c):
if grid[i][j][k] == 'S':
sz, sy, sx = i, j, k
if grid[i][j][k] == 'E':
ez, ey, ex = i, j, k
dz, dy, dx = [0, 0, 0, 0, 1, -1], [1, 0, -1, 0, 0, 0], [0, 1, 0, -1, 0, 0]
answer = bfs(sz, sy, sx)
if answer > 0:
print("Escaped in "+str(answer)+" minute(s).")
else:
print("Trapped!")