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 |