IT/coding study

[acmicpc] 6593. 상범 빌딩(python)

seyeonHello 2023. 2. 7. 23:11

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