3차원 배열 사용
import sys
from collections import deque
input=sys.stdin.readline
dirs=[(1,0,0),(-1,0,0),(0,1,0),(0,0,1),(0,-1,0),(0,0,-1)] #L,R,C
while True:
L,R,C=map(int,input().split())
visit=[[[0]*C for _ in range(R)] for _ in range(L)]
if L==0 and R==0 and C==0: break
building=[]
floor=[]
for _ in range(L*R+L):
tmp=list(input().strip())
if len(tmp)==0:
building.append(floor)
floor=[]
else:
floor.append(tmp)
#시작,종료지점찾기
for l in range(L):
for r in range(R):
for c in range(C):
if building[l][r][c]=='S':
src_l,src_r,src_c=l,r,c
elif building[l][r][c]=='E':
dst_l,dst_r,dst_c=l,r,c
visit=[[[0]*C for _ in range(R)] for _ in range(L)]
q=deque([(src_l,src_r,src_c)])
visit[src_l][src_r][src_c]=1
answer=0
while q:
l,r,c=q.popleft()
if l==dst_l and r==dst_r and c==dst_c:
answer = visit[l][r][c]
break
for i in range(len(dirs)):
nl,nr,nc=l+dirs[i][0],r+dirs[i][1],c+dirs[i][2]
if 0<=nl<L and 0<=nr<R and 0<=nc<C:
if visit[nl][nr][nc]==0 and building[nl][nr][nc]!='#':
q.append((nl,nr,nc))
visit[nl][nr][nc]=visit[l][r][c]+1
if answer==0:
print('Trapped!')
else:
print("Escaped in %d minute(s)." % (answer-1))
https://www.acmicpc.net/problem/6593
6593번: 상범 빌딩
당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어
www.acmicpc.net
'IT > coding study' 카테고리의 다른 글
[acmicpc] 1938. 통나무 옮기기(python) (0) | 2023.03.05 |
---|---|
[acmicpc] 21609. 상어 중학교(python) (0) | 2023.02.12 |
[acmicpc] 20057. 마법사 상어와 토네이도(python) (0) | 2023.02.05 |
[acmicpc] 10816. 숫자 카드 2(python) (0) | 2022.11.11 |
[acmicpc] 2206. 벽 부수고 이동하기(python) (0) | 2022.10.10 |