링크 : https://www.acmicpc.net/problem/6593
6593번: 상범 빌딩
당신은 상범 빌딩에 갇히고 말았다. 여기서 탈출하는 가장 빠른 길은 무엇일까? 상범 빌딩은 각 변의 길이가 1인 정육면체(단위 정육면체)로 이루어져있다. 각 정육면체는 금으로 이루어져 있어
www.acmicpc.net
- 문제
- 소요시간: 56분 7초
- 설계하기(접근방법)
1. 입력받기
입력받는것이 정말 까다로웠다.
x의 배수에 주의하여 3차원 배열로 입력받는다
2. 구현하기
dx dy뿐만 아닌 dz까지 선언하여 bfs로 순회를 해준다
끝난 지점의 최단 시간을 저장한다
3. 출력하기
최단 시간이 존재한다면 포맷 형태로 출력하고
존재하지 않는다면 Trapped를 출력한다.
- 코드(출력)
from collections import deque
z, x, y = map(int, input().split())
def bfs(z,x,y, end_z, end_x, end_y,max_z,max_x,max_y):
q = deque()
q.append([z,x,y])
dz = [0, 0, 0, 0, 1, -1]
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, 1, -1, 0, 0]
while q:
if z == end_z and x == end_x and y == end_y:
break
z, x, y = q.popleft()
for i in range(6):
nz = z + dz[i]
nx = x + dx[i]
ny = y + dy[i]
if 0<= nz < max_z and 0<= nx < max_x and 0<= ny < max_y and visited[nz][nx][ny] == 0:
if graph[nz][nx][ny] == '.' or graph[nz][nx][ny] == 'E':
visited[nz][nx][ny] = visited[z][x][y] + 1
q.append([nz,nx,ny])
while x or z or y:
visited = [[[0 for _ in range(y)] for _ in range(x)] for _ in range(z)]
graph = []
for i in range(z):
graph_z = []
for j in range(x + 1):
if j % (x+1) == x:
input()
continue
else:
a = list(input())
for k in range(y):
if a[k] == 'S':
start_location_z = i
start_location_x = j
start_location_y = k
visited[i][j][k] = 1
if a[k] == 'E':
end_location_z = i
end_location_x = j
end_location_y = k
graph_z.append(a)
graph.append(graph_z)
bfs(start_location_z,start_location_x,start_location_y,end_location_z,end_location_x,end_location_y,z,x,y)
if visited[end_location_z][end_location_x][end_location_y] == 0:
print("Trapped!")
else:
minute = visited[end_location_z][end_location_x][end_location_y] - 1
print(f'Escaped in {minute} minute(s).')
z, x, y = map(int, input().split())
- 얻어갈 부분
1. 3차월 배열로 구현하느라 상당히 까다로웠다. 변수의 이름이 길어지니 가독성은 좋아졌지만 구현하는데에는 까다로움이 있는 것 같다. 변수 이름을 조절하자.
'알고리즘(백준) > BFS & DFS' 카테고리의 다른 글
[알고리즘/BFS & DFS] 1967번 : 트리의 지름 - python (0) | 2024.02.04 |
---|---|
[알고리즘/BFS & DFS] 7576번 : 토마토 - python (1) | 2024.02.03 |
[알고리즘/BFS & DFS] 5014번 : 스타트링크 - python (0) | 2024.02.03 |
[알고리즘/BFS & DFS] 1743번 : 음식물 피하기 - python (1) | 2024.02.03 |
[알고리즘/BFS & DFS] 13913번 : 숨바꼭질 4 - python (0) | 2024.02.03 |