Hikenny25

7569 - 토마토 본문

baekjoon (solved.ac)/class 3 Solve

7569 - 토마토

hikenny 2022. 11. 1. 18:43

https://www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

 

- BFS

 

import sys
input = sys.stdin.readline

from collections import deque

m, n, h = map(int, input().split())
tomato = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)]

q = deque()
for k in range(h):
    for i in range(n):
        for j in range(m):
            if tomato[k][i][j] == 1:
                q.append([k,i,j])

delta = [(-1,0,0),(1,0,0),(0,-1,0),(0,1,0),(0,0,-1),(0,0,+1)]
predecessor = [[[0] * m for _ in range(n)] for _ in range(h)]

while len(q) != 0:
    w, r, c = q.pop()
    for k, i, j in delta:
        dw = w + k
        dr = r + i
        dc = c + j

        if 0 <= dw < h and 0 <= dr < n and 0 <= dc < m and tomato[dw][dr][dc] == 0:
            tomato[dw][dr][dc] = 1
            q.appendleft([dw,dr,dc])
            predecessor[dw][dr][dc] = predecessor[w][r][c] + 1

for k in range(h):
    for i in range(n):
        for j in range(m):
            if tomato[k][i][j] == 0:
                print(-1)
                exit()

mi = 0
for k in range(h):
    for i in range(n):
        for j in range(m):
            if predecessor[k][i][j] > mi:
                mi = predecessor[k][i][j]

print(mi)

 

저번 문제랑 똑같음 ㅋㅋ; 몇 개만 수정 후 제출

'baekjoon (solved.ac) > class 3 Solve' 카테고리의 다른 글

5430 - AC  (0) 2022.11.04
10026 - 적록색약  (0) 2022.11.03
7576 - 토마토  (1) 2022.11.01
5525 - IOIOI  (2) 2022.10.31
1992 - 쿼드트리  (0) 2022.10.31
Comments