[백준] 7569 :토마토

JIN·2022년 1월 25일
0

토마토

토마토
저번에 이 문제를 풀었던 기억이 나서 어렵지 않게 풀었다.
차원이 하나 추가된다는 것만 조건에 추가해주면 된다 .
한달 전에 푼 문제인데 새삼 실력 많이 늘었다는 것을 느꼈다 (감격 ,,)

from collections import deque
import sys
input = sys.stdin.readline
m, n, h = map(int, input().split())
graph = [[] for _ in range(h)]
for i in range(h):
	for j in range(n):
		graph[i].append(list(map(int, input().split())))
 # 3차원 배열
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]

#방문처리는 해주기 
visited = [[[False]*m for _ in range(n)] for _ in range(h)]
q = deque()
# 1인 좌표 큐에 넣고 시작 
for i in range(h):
	for j in range(n):
		for k in range(m):
			if graph[i][j][k] == 1:
				q.append([i, j, k])

def bfs():
	while q:
		z, x, y = q.popleft()
		for i in range(6):
			nz = z + dz[i]
			nx = x + dx[i]
			ny = y + dy[i]

			if nz < 0 or nz >= h or nx < 0 or ny < 0 or nx >= n or ny >= m  :
				continue
			# 방문 안했고 인접한 노드가 0이면 현재 내 값에서 1 더해줌
			if graph[nz][nx][ny] == 0 and not visited[nz][nx][ny]:
				visited[nz][nx][ny] = True
				graph[nz][nx][ny] = graph[z][x][y] + 1
				q.append([nz, nx, ny])
bfs()
answer = -1
for i in graph:
	for j in i:
		for k in j:
			if k == 0:
				print(-1)
				exit()
			if k > answer:
				answer = k
print(answer-1)



profile
배우고 적용하고 개선하기

0개의 댓글