<문제>
<입출력>
<풀이>
입력 파트가 까다로워 문제는 복잡해보였으나 기본적인 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)
'코딩 테스트 > 최단경로' 카테고리의 다른 글
[백준 10282번] 해킹 문제 풀이 (0) | 2023.08.09 |
---|---|
[백준 1238번] 파티 문제 풀이 (0) | 2023.08.08 |
[백준 1504번] 특정한 최단 경로 문제 (0) | 2023.08.07 |
[개념] 다익스트라 알고리즘 (0) | 2023.08.03 |
[개념] 최단 경로 (0) | 2023.07.26 |
댓글