T-coding
백준 7569 토마토 / Python 본문
728x90
728x90
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
m, n, h = map(int, input().split())
arr = [[list(map(int, sys.stdin.readline().split())) for _ in range(n)] for _ in range(h)]
visited = [[[False] * m for _ in range(n)] for _ in range(h)]
q = deque()
ans = 0
dx = [0, 0, -1, 1, 0, 0]
dy = [-1, 1, 0, 0, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
def bfs():
while q:
z, y, x = q.popleft()
visited[z][y][x] = False
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0 <= nx < m and 0 <= ny < n and 0 <= nz < h:
if arr[nz][ny][nx] == 0 and not visited[nz][ny][nx]:
q.append((nz, ny, nx))
arr[nz][ny][nx] = arr[z][y][x] + 1
visited[nz][ny][nx] = False
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))
bfs()
for i in range(h):
for j in range(n):
for k in range(m):
if arr[i][j][k] == 0:
print(-1)
exit(0)
ans = max(ans, arr[i][j][k])
print(ans - 1)
728x90
300x250
'Baekjoon' 카테고리의 다른 글
백준 1029 그림 교환 / Python (0) | 2023.03.18 |
---|---|
백준 1022 소용돌이 예쁘게 출력하기 / Python (0) | 2023.03.18 |
백준 25206 너의 평점은 / Python (0) | 2023.03.16 |
백준 5347 LCM / Python (0) | 2023.03.16 |
백준 4659 비밀번호 발음하기 / Python (0) | 2023.03.16 |