[ BOJ / Python ] 6593번 상범 빌딩

황승환·2022년 7월 23일
0

Python

목록 보기
387/498


이번 문제는 BFS를 통해 해결하였다. 일반적인 문제와 다른점은 3차원으로 탐색을 해야 한다는 점이었다. 이를 위해 6가지 방향에 대한 리스트를 3개 만들어 모든 방향을 탐색할 수 있도록 하였고, BFS방식으로 모든 좌표를 탐색하며 답을 구하였다.

Code

from collections import deque
def bfs(sz, sy, sx):
    q = deque()
    q.append((sz, sy, sx, 0))
    visited = [[[False for _ in range(c)] for _ in range(r)] for _ in range(l)]
    visited[sz][sy][sx] = True
    while q:
        z, y, x, time = q.popleft()
        if (z, y, x) == (ez, ey, ex):
            return time
        for i in range(6):
            nz, ny, nx = z+dz[i], y+dy[i], x+dx[i]
            if 0 <= nz < l and 0 <= ny < r and 0 <= nx < c and grid[nz][ny][nx] != '#' and not visited[nz][ny][nx]:
                visited[nz][ny][nx] = True
                q.append((nz, ny, nx, time+1))
    return -1
while True:
    l, r, c = map(int, input().split())
    if (l, r, c) == (0, 0, 0):
        break
    grid = []
    for _ in range(l):
        tmp = [list(str(input())) for _ in range(r)]
        grid.append(tmp)
        tmp1 = input()
    sz, sy, sx = 0, 0, 0
    ez, ey, ex = 0, 0, 0
    for i in range(l):
        for j in range(r):
            for k in range(c):
                if grid[i][j][k] == 'S':
                    sz, sy, sx = i, j, k
                if grid[i][j][k] == 'E':
                    ez, ey, ex = i, j, k
    dz, dy, dx = [0, 0, 0, 0, 1, -1], [1, 0, -1, 0, 0, 0], [0, 1, 0, -1, 0, 0]
    answer = bfs(sz, sy, sx)
    if answer > 0:
        print("Escaped in "+str(answer)+" minute(s).")
    else:
        print("Trapped!")

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글