# 6593 상범 빌딩
from collections import deque
def printresult(flag,sec):
if flag:
return f'Escaped in {sec} minute(s).'
else:
return 'Trapped!'
while True:
L,R,C = map(int,input().split())
if L+R+C == 0:
break
building = []
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]
startpoint = []
endpoint = []
for ind in range(L):
temp = []
for x in range(R):
input_list = list(input())
for y,val in enumerate(input_list):
if val == 'S':
startpoint = [x,y,ind]
elif val == 'E':
endpoint = (x,y,ind)
temp.append(input_list)
building.append(temp)
input()
# 층,행,열
stack = deque()
stack.append(startpoint)
building[startpoint[2]][startpoint[0]][startpoint[1]] = '#'
minutes = 0
flag = False
while stack:
new_stack = []
minutes += 1
for x,y,z in stack:
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0<=nx<R and 0<=ny<C and 0<=nz<L:
if building[nz][nx][ny] != '#':
if (nx,ny,nz) == endpoint:
flag = True
break
else:
building[nz][nx][ny] = '#'
new_stack.append((nx,ny,nz))
if flag:
print(printresult(flag,minutes))
break
stack = new_stack[:]
if not flag:
print(printresult(flag,minutes))
BFS 관련 문제이다. 문제를 제대로 안 읽어서 input값을 제대로 안 받았더니 많이 틀렸던 문제이다.
일반적인 BFS를 3차원으로 바뀐것과 동일하고, range를 많이 쓰면 메모리 초과가 날 수 있으니 조심해서 풀면 되는 문제이다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 5582 공통 부분 문자열 (0) | 2021.02.18 |
---|---|
[BOJ/백준] 3020 개똥벌레 (0) | 2021.02.18 |
[BOJ/백준] 11054 가장 긴 바이토닉 부분 수열 (0) | 2021.02.17 |
[BOJ/백준] 2631 줄세우기 (0) | 2021.02.16 |
[BOJ/백준] 2873 롤러코스터 (0) | 2021.02.16 |