๐Ÿงฉ Problem Solving/[๋ฐฑ์ค€]

[๋ฐฑ์ค€] 7569 ํ† ๋งˆํ†  (python ํŒŒ์ด์ฌ)

์ œ๋ด‰์•„ 2022. 6. 14. 03:57

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

 

7569๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N๊ณผ ์Œ“์•„์˜ฌ๋ ค์ง€๋Š” ์ƒ์ž์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

 

ํ’€์ด ๊ณผ์ •

์ €๋ฒˆ์— ํ‘ผ ํ† ๋งˆํ†  ๋ฌธ์ œ์™€ ๊ฑฐ์˜ ์œ ์‚ฌํ•˜๋‹ค. ์ฐจ์ด์ ์€ z์ถ•์ด ์ƒ๊น€.

๋ฌธ์ œ์—์„œ M,N,H ์ตœ๋Œ€๊ฐ’์ด ๋ชจ๋‘ 100์œผ๋กœ ํฐ์ˆ˜๊ฐ€ ์•„๋‹ˆ์—ฌ์„œ ๊ทธ๋ƒฅ 3์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ z์ถ• ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋งŒ ์ด์ „ ๋ฌธ์ œ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. ์ด์ „ ๋ฌธ์ œ ํ’€์ด์— ๋Œ€ํ•œ ์ •๋ณด๋Š” 7576-ํ† ๋งˆํ†  ์ฐธ์กฐ

 

import sys
from collections import deque
input = sys.stdin.readline
dz = [1, -1, 0, 0, 0, 0] # ์œ„, ์•„๋ž˜, ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์•ž, ๋’ค
dy = [0, 0, 0, 0, -1, 1]
dx = [0, 0, -1, 1, 0, 0]

M, N, H = map(int,input().rstrip().split())

tomato_box = [[[] for _ in range(N)] for _ in range(H)] #z, y, x ์ขŒํ‘œ
day = [[[0 for _ in range(M)] for _ in range(N)] for _ in range(H)]
tomato = deque()

for i in range(H):
    for j in range(N):
        tomato_box[i][j].extend([int(x) for x in input().rstrip().split()])
        for k in range(M):
            if tomato_box[i][j][k] == 1:
                tomato.append([i,j,k])

def bfs():

    while tomato:
        t = tomato.popleft()
        z, y, x = t[0], t[1], t[2]
        for i in range(6):
            nz, ny, nx = z + dz[i], y + dy[i], x + dx[i]
            if 0 <= nz < H and 0 <= ny < N and 0 <= nx < M:
                if tomato_box[nz][ny][nx] == 0:
                    tomato_box[nz][ny][nx] = 1
                    day[nz][ny][nx] = day[z][y][x] + 1
                    tomato.append([nz,ny,nx])

bfs()
zeroflag = False
resultday = 0
for i in range(H):
    for j in range(N):
        for k in range(M):
            if tomato_box[i][j][k] == 0:
                zeroflag = True
            if resultday < day[i][j][k]:
                resultday = day[i][j][k]

if zeroflag:
    print(-1)
else:
    print(resultday)