https://www.acmicpc.net/problem/6593
BFS로 최단거리 찾기 문제인데, 3차원인 경우이다.
따라서 배열을 3중으로 사용하였다.
그것만 헷갈리지 않으면 전혀 어렵지 않은 문제.
정답 풀이:
import sys
from collections import deque
input = sys.stdin.readline
dh = [-1, 1, 0, 0, 0, 0]
dr = [0, 0, -1, 1, 0, 0]
dc = [0, 0, 0, 0, -1, 1]
while True:
h, r, c = map(int, input().split(" "))
if h == 0 and r == 0 and c == 0:
break
sh, sr, sc = -1, -1, -1
eh, er, ec = -1, -1, -1
graph = []
for H in range(h):
tgraph = []
for R in range(r):
tlist = list(map(str, input().rstrip()))
for C in range(c):
if tlist[C] == 'S':
sh, sr, sc = H, R, C
elif tlist[C] == 'E':
eh, er, ec = H, R, C
tgraph.append(tlist)
graph.append(tgraph)
input()
queue = deque()
visited = [[[False for _ in range(c)] for _ in range(r)] for _ in range(h)]
queue.append((sh, sr, sc, 0))
visited[sh][sr][sc] = True
escapeTime = -1
while queue:
H, R, C, time = queue.popleft()
if H == eh and R == er and C == ec:
escapeTime = time
break
for i in range(6):
nh = H + dh[i]
nr = R + dr[i]
nc = C + dc[i]
if 0 <= nh < h and 0 <= nr < r and 0 <= nc < c and graph[nh][nr][nc] != '#' and visited[nh][nr][nc] == False:
queue.append((nh, nr, nc, time+1))
visited[nh][nr][nc] = True
if escapeTime == -1:
print("Trapped!")
else:
print("Escaped in {} minute(s).".format(escapeTime))
결과
오타 하나 나서 틀렸었다 ^^..
'알고리즘' 카테고리의 다른 글
백준 4179 불! - 골드4 [파이썬] (0) | 2022.12.01 |
---|---|
백준 1043 거짓말 - 골드4 [파이썬] (0) | 2022.11.23 |
백준 15686 치킨 배달 - 골드5 [파이썬] (0) | 2022.11.22 |
백준 2573 빙산 - 골드4 [파이썬] (0) | 2022.11.17 |
백준 12865 평범한 배낭 - 골드5 [파이썬] (0) | 2022.11.16 |