[BOJ] 토마토 2

Minsu Han·2022년 9월 5일
0

알고리즘연습

목록 보기
7/105

코드

from sys import stdin
from collections import deque
input = stdin.readline

dx = [0,0,0,0,1,-1]
dy = [0,0,1,-1,0,0]
dz = [1, -1,0,0,0,0]
queue = deque()

M, N, H = map(int, input().split())
graph = []

for _ in range(H):
    graph.append([list(map(int, input().split())) for _ in range(N)])

for z in range(H):
    for i in range(N):
        for j in range(M):
            if graph[z][i][j] == 1:
                queue.append((z, i, j))

while queue:
    z, x, y = queue.popleft()
    for i in range(6):
        nz = z + dz[i]
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 0 or nx >= N or ny < 0 or ny >= M or nz < 0 or nz >= H:
            continue
        if graph[nz][nx][ny] == -1:
            continue
        if graph[nz][nx][ny] == 0:
            graph[nz][nx][ny] = graph[z][x][y] + 1
            queue.append((nz, nx, ny))

flag = True
ans = 0
for z in graph:
    for i in z:
        for j in i:
            ans = max(ans, j)
            if j == 0:
                flag = False
                break
                
if flag:
    print(ans-1)
else:
    print(-1)

결과

image


풀이 방법

  • 이차원 배열이 주어졌던 이전 토마토 문제에서, 3차원 배열이 주어지며 인접 토마토의 방향이 왼쪽, 오른쪽, y축으로 위,아래, z축으로 위,아래 6방향으로 늘어난 문제이다
  • 기존의 로직에서 2차원 배열을 3차원 배열로, z축 방향을 계산하는 코드를 추가하면 되었다.

profile
기록하기

0개의 댓글