첫 골드 5 문제
3차원 + 6방향 탐색
기본 BFS 풀이를 조금 어렵게 응용만 문제같다.
풀이시간 : 1시간 정도
한번에 통과함
import sys
from collections import deque
sys.stdin =open('input.txt')
# 7569 토마토 골드 5
from collections import deque
dy = [1,-1,0,0,0,0]
dx = [0,0,1,-1,0,0]
dz = [0,0,0,0,1,-1]
def bfs():
global flag
deq = deque()
for k in range(h):
for i in range(n):
for j in range(m):
if arr[k][i][j] == 1 and visited[k][i][j] == -1: # 익은 토마토 찾기
deq.append((k,i,j))
visited[k][i][j] = 0
while deq:
z,y,x = deq.popleft() # 높이, 세로, 가로
for p in range(6):
ny = y + dy[p]
nx = x + dx[p]
nz = z + dz[p]
if 0<= ny < n and 0 <= nx < m and 0 <= nz < h: # 4방향 체크
if visited[nz][ny][nx] == -1 and arr[nz][ny][nx] == 0:
visited[nz][ny][nx] = visited[z][y][x] + 1
deq.append((nz,ny,nx))
def find():
global flag,max_v
for k in range(h):
for i in range(n):
for j in range(m):
if arr[k][i][j] == 0 and visited[k][i][j] == -1:
flag = 0
return
if max_v < visited[k][i][j]:
max_v = visited[k][i][j]
m, n, h = map(int,input().split())
arr = []
for i in range(h):
arr.append([list(map(int,input().split())) for _ in range(n)])
# print(arr)
flag = 1
max_v = 0
visited = [[[-1] * (m) for _ in range(n)] for _ in range(h)]
bfs()
# for i in range(h):
# for j in range(n):
# print(visited[i][j])
find()
if flag:
if max_v ==0:
print(0)
else:
print(max_v)
else:
print(-1)
'알고리즘 문제풀이' 카테고리의 다른 글
백준 1931 회의실 배정 Python 그리디 실버 1 (0) | 2024.04.04 |
---|---|
백준 4964 섬의 개수 Python BFS 실버 2 (0) | 2024.04.04 |
백준 1991 트리 순회 Python 트리 DFS 실버 1 (0) | 2024.03.31 |
백준 2606 바이러스 Python BFS 실버3 (0) | 2024.03.31 |
백준 5014 스타트링크 Python BFS 실버 1 (2) | 2024.03.31 |