본문 바로가기

boj

백준 7569 토마토2

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 sys
input=sys.stdin.readline
from 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=0

for 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)

'boj' 카테고리의 다른 글

백준 14888 연산자 끼워넣기  (0) 2022.04.21
백준 17114 하이퍼 토마토  (0) 2022.04.20
백준 2178 미로 탐색  (0) 2022.04.19
백준 2667 단지번호붙이기  (0) 2022.04.19
백준 13023 ABCDE  (0) 2022.04.18