백준 python 기록

백준 파이썬 6593 상범 빌딩

우히힝 2022. 2. 26. 16:02

https://www.acmicpc.net/problem/6593

 

6593번: 상범 빌딩

당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어

www.acmicpc.net

 

 

굉장히 노가다를 강요하는 BFS문제였읍니다.

 

하면서 아 변수명좀 제대로 지을걸.. 이라는 생각이 절로 드는 문제였읍니다.

 

from collections import deque

while True:
    L, R, C = map(int,input().split())

    if (L + R + C) == 0:
        exit()

    building = []

    visited = [[[0]*C for _ in range(R)] for _ in range(L)]

    S = []
    E = []
    for _ in range(L):
        building.append([list(input()) for i in range(R)])
        input()

    for z in range(L):
        for x in range(R):
            for y in range(C):
                if building[z][x][y] == "S":
                    S =[x,y,z]
                    visited[z][x][y] = 1
                if building[z][x][y] == "E":
                    E =[x,y,z]

    dx = [-1,1,0,0,0,0]
    dy = [0,0,-1,1,0,0]
    dz = [0,0,0,0,-1,1]

    queue = deque([])
    queue.append(S)
    flag = False

    while queue:
        x,y,z = queue.popleft()

        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 visited[nz][nx][ny] == 0:
                    if building[nz][nx][ny] == "." or building[nz][nx][ny] == 'E':
                        visited[nz][nx][ny] = visited[z][x][y] + 1
                        queue.append([nx,ny,nz])


    if visited[E[2]][E[0]][E[1]] == 0:
        print("Trapped!")
    else:
        print("Escaped in %d minute(s)." % (visited[E[2]][E[0]][E[1]]-1))