문제
https://www.acmicpc.net/problem/7569
7569번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,
www.acmicpc.net
코드
import sys
from collections import deque
input=sys.stdin.readline
queue=deque()
m,n,h=map(int, input().split()) #n행 m열
dn=[0,0,-1,1,0,0]
dm=[-1,1,0,0,0,0]
dh=[0,0,0,0,-1,1]
graph=[]
for i in range(h):
temp=[]
for j in range(n):
temp.append(list(map(int, input().split())))
for k in range(m):
if temp[j][k]==1:
queue.append([i,j,k])
graph.append(temp)
while queue:
z,r,c=queue.popleft()
for i in range(6):
nn=r+dn[i]
nm=c+dm[i]
nh=z+dh[i]
if 0<=nn<n and 0<=nm<m and 0<=nh<h and graph[nh][nn][nm]==0:
graph[nh][nn][nm]=graph[z][r][c]+1
queue.append([nh,nn,nm])
day=0
for i in range(h):
for j in range(n):
for k in range(m):
if graph[i][j][k]==0:
print(-1)
exit(0)
day=max(day, graph[i][j][k])
print(day-1)
'문제풀이 > DFS & BFS' 카테고리의 다른 글
[파이썬] [DFS] 백준 1987 알파벳 (0) | 2022.05.02 |
---|---|
[파이썬] [BFS] 백준 2206 벽 부수고 이동하기 (0) | 2022.04.09 |
[파이썬] [BFS] 백준 3055 탈출 (0) | 2022.03.23 |
[파이썬] [DFS] 백준 2667 단지번호붙이기 (0) | 2022.03.01 |
[파이썬] [BFS] Pro 경주로 건설 (0) | 2022.02.23 |