ํ’€์ด


์ด์ „์— ํ’€์—ˆ๋˜ โ€œํ† ๋งˆํ† โ€ ์™€ ๊ฐ™์€ ๋ฌธ์ œ์ด์ง€๋งŒ 3์ฐจ์› ๊ฐœ๋…์„ ์ž…ํžŒ ๋ฌธ์ œ์ด๋‹ค.

๊ฐœ๋…์€ ๊ฐ™๊ธฐ์— ๋†’์ด์— ๋Œ€ํ•œ ๋ณ€์ˆ˜๋“ค๋งŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ์–ด๋ ต์ง€์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์˜ํ•  ์ ์€ ์ขŒํ‘œ๋ฅผ ์ง€์ •ํ•  ๋•Œ ๋†’์ด์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ์ด ๋จผ์ € ์™€์•ผํ•œ๋‹ค๋Š” ์ ๊ณผ dx, dy, dz ๋ฅผ ์ˆ˜์ •ํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ์ ์ด ์žˆ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


# ํ† ๋งˆํ† 
from collections import deque
import sys
input = sys.stdin.readline
 
def bfs():
    while q:
        x, y, z = q.popleft()
        for k in range(6):
            nx = x + dx[k]
            ny = y + dy[k]
            nz = z + dz[k]
            if 0 <= nx < n and 0 <= ny < m and 0 <= nz < h and graph[nz][nx][ny] == 0:  # ๋ฒ”์œ„ ๋‚ด ์ด๋ฉด์„œ ์ต์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ
                q.append([nx, ny, nz])
                graph[nz][nx][ny] = graph[z][x][y] + 1  # ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ๊ฒธ ์ผ์ˆ˜ ๊ณ„์‚ฐ
    return
 
 
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
 
m, n, h = map(int, input().split())
graph = [[list(map(int, input().split())) for _ in range(n)] for k in range(h)]
q = deque()
 
for i in range(n):
    for j in range(m):
        for k in range(h):
            if graph[k][i][j] == 1:
                q.append([i, j, k])  # ์ด๋ฏธ ์ต์–ด์žˆ๋Š” ํ† ๋งˆํ† ๋“ค์„ ํ์— ์‚ฝ์ž…
 
bfs()  # BFS ์‹คํ–‰
 
allRipe = True
ans = 0
for i in range(n):
    for j in range(m):
        for k in range(h):
            if graph[k][i][j] == 0:
                allRipe = False
                break
            ans = max(ans, graph[k][i][j])
 
if allRipe == False:
    print(-1)
elif ans == 1:
    print(0)
else:
    print(ans - 1)

References