

- BFS를 3차원배열을 이용하여 풀었다
import sys
from collections import deque
directZ = [0,0,0,0,1,-1]
directY = [-1,1,0,0,0,0]
directX = [0,0,-1,1,0,0]
while True:
mat = []
L, R, C = map(int,input().split())
if L + R + C == 0:
break
for i in range(L):
arr = []
for j in range(R):
tmp = list(input())
arr.append(tmp)
space = input()
mat.append(arr)
def bfs(z,y,x):
q = deque([(z,y,x)])
while q:
zz,yy,xx = q.popleft()
for k in range(6):
dz = directZ[k] + zz
dy = directY[k] + yy
dx = directX[k] + xx
if dy >= R or dy < 0 or dx >= C or dx < 0 or dz >= L or dz < 0:
continue # 배열의 범위를 벗어나면 continue
if mat[dz][dy][dx] == 'E':
q = []
return mat[zz][yy][xx] + 1 # E를 만나면 해당하는 숫자값 리턴
elif mat[dz][dy][dx] == '.': # 갈 수 있는 길이라면 출발점의 +1을 해줌
q.append([dz,dy,dx])
mat[dz][dy][dx] = mat[zz][yy][xx] + 1
for i in range(L):
for j in range(R):
for k in range(C):
if mat[i][j][k] == 'S': # 3차원 배열을 돌다 S를 만나면 시작
mat[i][j][k] = 0
result = bfs(i,j,k) # bfs의 return값을 result에 저장
if result != None:
print(f"Escaped in {result} minute(s). ")
else:
print('Trapped!')

'Python > 백준' 카테고리의 다른 글
| [백준/Python] 12761.돌다리 (0) | 2023.03.03 |
|---|---|
| [백준/Python] 13565. 침투 (0) | 2023.03.02 |
| [백준/Python] 2467. 용액 (0) | 2022.12.23 |
| [백준/Python] 17086. 아기상어 2 (0) | 2022.12.20 |
| [백준/Python] 1806. 부분합 (0) | 2022.12.13 |

