Potato

 

 

 

- 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

+ Recent posts