본문 바로가기
코딩 테스트/최단경로

[백준 6593번] 상범 빌딩 문제 풀이

by 서영선 2023. 8. 6.

 

 

<문제>

'

 

 

<입출력>

 

 

<풀이>

입력 파트가 까다로워 문제는 복잡해보였으나 기본적인 BFS 최단 경로 문제였다. 

3차원 배열을 입력받을때, 경로를 구할 같은 크기의 3차원 배열을 만들어 주었다.

 

- 입력 파트 : 0 0 0을 입력하기 전까지 계속 최단 경로를 구해주어야 한다. 

  a 배열은 3차원 배열의 값을 입력받고, d 배열은 해당 위치까지의 최단 거리를 저장, q는 bfs의 거리를 구하는데 사용한다.

while True:
    l, r, c = map(int, input().split())
    if l == 0 and r == 0 and c == 0:
        break
    a = [[[]*c for _ in range(r)] for _ in range(l)]
    d = [[[0]*c for _ in range(r)] for _ in range(l)]
    q = deque()
    for i in range(l):
        a[i] = [list(map(str, input().strip())) for _ in range(r)]
        input()
    for i in range(l):
        for j in range(r):
            for k in range(c):
                if a[i][j][k] == 'S':
                    bfs(i, j, k)

 

 

 

 

<전체 코드>

from collections import deque
import sys

input = sys.stdin.readline
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, 1, -1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]

def bfs(x, y, z):
    q.append([x, y, z])
    d[x][y][z] = 1
    while q:
        x, y, z = q.popleft()
        for i in range(6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]
            if 0 <= nx < l and 0 <= ny < r and 0 <= nz < c:
                if a[nx][ny][nz] == 'E':
                    print("Escaped in %d minute(s)." %d[x][y][z])
                    return
                if a[nx][ny][nz] == '.' and d[nx][ny][nz] == 0:
                    d[nx][ny][nz] = d[x][y][z] + 1
                    q.append([nx, ny, nz])
    print("Trapped!")

while True:
    l, r, c = map(int, input().split())
    if l == 0 and r == 0 and c == 0:
        break
    a = [[[]*c for _ in range(r)] for _ in range(l)]
    d = [[[0]*c for _ in range(r)] for _ in range(l)]
    q = deque()
    for i in range(l):
        a[i] = [list(map(str, input().strip())) for _ in range(r)]
        input()
    for i in range(l):
        for j in range(r):
            for k in range(c):
                if a[i][j][k] == 'S':
                    bfs(i, j, k)

 

 

 

댓글