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 as dq
input = sys.stdin.readline
def solution():
M,N,H = map(int,input().split())
maps = [[list(map(int,input().split())) for _ in range(N)] for _ in range(H)]
dx = [1,-1,0,0,0,0]
dy = [0,0,1,-1,0,0]
dz = [0,0,0,0,1,-1]
q = dq()
def bfs():
while q:
z,x,y= q.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0<=nx <N and 0<=ny <M and 0<=nz <H:
if maps[nz][nx][ny] == 0 :
maps[nz][nx][ny] = maps[z][x][y] + 1
q.append((nz,nx,ny))
for i in range(H):
for j in range(N):
for k in range(M):
if maps[i][j][k] == 1:
q.append((i,j,k))
bfs()
check = 0
days = -2
for i in range(H):
for j in range(N):
for k in range(M):
if maps[i][j][k] == 0:
check =1
days = max(days,maps[i][j][k])
if check ==1:
print(-1)
elif days ==-1:
print(0)
else:
print(days-1)
solution()
7576 번의 확장버전이다. 처음으로 z축이 붙은 문제를 풀어봤는데, 접근 자체는 같게 하면됐다.
다른사람의 풀이
'취준 > 백준' 카테고리의 다른 글
16928 - 파이썬 (0) | 2022.08.01 |
---|---|
1504 - 파이썬 (0) | 2022.07.27 |
7576 - 파이썬 (0) | 2022.07.14 |
2606 - 파이썬 (0) | 2022.07.13 |
24445 - 파이썬 (0) | 2022.07.11 |