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

+ Recent posts