업데이트:

최대 1 분 소요

문제

https://www.acmicpc.net/problem/7569

7569.png

풀이

이전에 풀었던 토마토(7576)와 비슷한 문제지만 위,아래가 생겨 배열의 차원이 늘어난 문제이다.
이에 맞추어 토마토를 담을 배열의 차원을 늘여주고 이를 탐색하기위해 움직일 방향 또한 추가해준다.

from collections import deque
import sys
input = sys.stdin.readline
m,n,h = map(int,input().split())
board = []
q = deque()
dh,dx,dy = [-1,1],[-1,1,0,0],[0,0,-1,1]
switch = False
for i in range(h):
    b = []
    for j in range(n):
        tomato = list(map(int,input().split()))
        for t in range(m):
            if tomato[t]==1:
                q.append((i,j,t))
            elif not tomato[t]:
                switch = True
        b.append(tomato)
    board.append(b)


while q:
    nh,nx,ny = q.popleft()
    for i in range(2):
        qh,qx,qy = nh+dh[i],nx,ny
        if 0<=qh<h and board[qh][qx][qy] == 0:
            q.append((qh,qx,qy))
            board[qh][qx][qy] = board[nh][nx][ny]+1
    for i in range(4):
        qh,qx,qy = nh, nx + dx[i], ny + dy[i]
        if 0<=qx<n and 0<=qy<m and board[qh][qx][qy] == 0:
            q.append((qh,qx,qy))
            board[qh][qx][qy] = board[nh][nx][ny]+1

day = 0

if switch:
    for i in range(h):
        for j in range(n):
            for k in range(m):
                if not board[i][j][k]:
                    print(-1)
                    exit(0)
                else:
                    day = max(day,board[i][j][k])
    print(day-1)
else:
    print(0)

생각 & 정리

이전에 풀었던 7576과 완전히 같은 문제지만 차원이 하나 늘어남에 따라
생각이 꽤나 복잡해졌다.
해당 문제를 통해 주어진 조건에 따라 생각하는 능력이 늘어난 것 같다.

태그:

카테고리:

업데이트:

댓글남기기