Skip to main content

백준 7569 토마토2

·138 words·1 min· loading

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

7569번: 토마토첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,www.acmicpc.net

전의 토마토와 완전히 똑같은 방식이다.

다만, 이번에는 z축이 추가됬다.

i,j,k로 인덱싱하고,

움직이는방향을 [[-1,0,0],[0,-1,0],[0,0,-1],[1,0,0],[0,1,0],[0,0,1]]

6방향으로 bfs를 진행하면 된다.

진행할때마다 얼마나 날짜가 지났는지까지 세주면 완벽

마지막에, 하나씩탐색하다가 0이 있으면 -1출력하고 종료

import sysinput=sys.stdin.readlinefrom collections import deque
moves=[[-1,0,0],[0,-1,0],[0,0,-1],[1,0,0],[0,1,0],[0,0,1]]def bfs(q):    day=0
    while q:        i,j,k,v=q.popleft()        for move in moves:
            a,b,c=move            ti=a+i            tj=b+j            tk=c+k
            if 0<=ti<h and 0<=tj<n and 0<=tk<m and arr[ti][tj][tk]=='0':
                q.append([ti,tj,tk,v+1])                arr[ti][tj][tk]='-1'
                  for i in range(h):        for j in range(n):
            for k in range(m):                if arr[i][j][k]=='0':
                    print(-1)                    return                print(v)
        m,n,h=map(int,input().split())
arr=[[list(input().strip().split())for _ in range(n)]for _ in range(h)]q=deque()
answer=0for i in range(h):    for j in range(n):        for k in range(m):
            if arr[i][j][k]=='1':                q.append((i,j,k,0))
                arr[i][j][k]='-1'            bfs(q)