[백준 6593번] 상범 빌딩

박형진·2023년 2월 4일
0

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


1. 코드

import sys
from collections import deque

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


while True:
    flag = False
    L, R, C = map(int, sys.stdin.readline().rstrip().split())

    if L == 0 and R == 0 and C == 0:
        break

    graph = []
    for i in range(L):
        temp = [list(sys.stdin.readline().rstrip()) for _ in range(R)]
        graph.append(temp)
        sys.stdin.readline()


    for i in range(L):
        for j in range(R):
            for k in range(C):
                if graph[i][j][k] == 'S':
                    start = (i, j, k)  # (z, x, y)
                    graph[i][j][k] = 0

    q = deque()
    q.append(start)
    while q:
        z, x, y = q.popleft()

        # 바로 탈출하여 최단거리 보장
        if flag:
            break

        for i in range(6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]

            if 0 <= nz < L and 0 <= nx < R and 0 <= ny < C:
                if graph[nz][nx][ny] == '.':
                    graph[nz][nx][ny] = graph[z][x][y] + 1
                    q.append((nz, nx, ny))

                elif graph[nz][nx][ny] == 'E':
                    flag = True
                    add = f'Escaped in {graph[z][x][y] + 1} minute(s).'
                    answer.append(add)

    if not flag:
        answer.append('Trapped!')

for i in answer:
    print(i)

2. 후기

기존에 자주 등장한 2차원 배열에서 z축을 추가한 문제이다.

[백준 5427번] 불 문제처럼 최단거리 값을 찾으면 즉시 while문을 탈출해야 최단거리가 계속 갱신되지 않는다.

BFS 특성상 처음 만나게 되는 답만 최단/최적의 값을 보장한다. 이 점을 까먹지 말고 답을 찾으면 즉시 while문을 탈출하자.

profile
안녕하세요!

0개의 댓글