이 문제는 백준 7576번 문제와 굉장히 유사한 문제이다.
다만 상자가 여러개 쌓이는 것으로 2차원 배열에서 3차원 배열이 됐음을 알 수 있다.
알고리즘을 공부하면서 3차원 배열에 대해서 다룰 일이 별로 없다보니 인덱스 값을 설정해주는 데에서 애를먹었다.
어디가 x 좌표 부분이고 어디가 y좌표 부분인지 이런게 너무 헷갈려서 계속해서 인덱스아웃 에러가 발생했었다.
결론적으로는 matrix[h][n][m] 즉 [z][x][y] 순서가 된다.
그외에 문제 해결방법은 bfs를 통해 해결해주면 된다.
m,n,h = map(int,input().split())
tomatos = []
visited = [[[False]*m for _ in range(n)] for _ in range(h)]
for _ in range(h):
tmp = []
for _ in range(n):
tmp.append(list(map(int,input().split())))
tomatos.append(tmp)
from collections import deque
q = deque()
for i in range(h):
for j in range(n):
for k in range(m):
if tomatos[i][j][k] == 1 and visited[i][j][k] == False:
q.append((i,j,k))
visited[i][j][k] = True
def bfs():
dx = [-1,1,0,0,0,0]
dy = [0,0,-1,1,0,0,]
dz = [0,0,0,0,1,-1]
while(q):
x,y,z = q.popleft()
for i in range(6):
nx = dx[i] +x
ny = dy[i] +y
nz = dz[i] +z
if 0<= nx < h and 0<= ny < n and 0<= nz < m:
#범위내에 있고 방문한 적없는 익지않은 토마토 방문
if tomatos[nx][ny][nz]== 0 and visited[nx][ny][nz] == False:
tomatos[nx][ny][nz] = tomatos[x][y][z] + 1
q.append((nx,ny,nz))
visited[nx][ny][nz] = True
bfs()
ans = 0
for a in tomatos:
for b in a:
for c in b:
#bfs 실행 후에도 안익은게 있는 경우
if c == 0:
print(-1)
exit(0)
ans = max(ans,max(b))
print(ans -1)
3차원 배열을 이용한 문제를 처음 접하다 보니 인덱스 설정 관련해서 어려움이 있던 문제였다.