[PY] 7569 : 토마토

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

 

2차원을 풀어보면 쉽다고 생각하고 접근했지만 다소 까다로운 면이 있었다.
파이썬에서 3차원 배열을 처음 써봤기 때문에, 인덱스로 뭘 던져야 할지 아예 모르겠더라..

다행히, 무식하게 dx dy dz 난사를 하니 해결이 됐다.

import sys
from collections import deque
input = sys.stdin.readline

garo, sero, tall = map(int, input().split())
box = [[[0 for col in range(garo)] for row in range(sero)] for depth in range(tall)]
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, 1, -1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]

for i in range(tall):
    for j in range(sero):
        box[i][j] = list(map(int, input().split()))[:garo]
# 가로 세로 층 입력 받고 나면
# [층][행][열] 순으로 접근 한다고 알려져있다.
# box[z][x][y]

# 전체 순회 돌면서 사전에 존재하는 모든 1에 대해 시도
def BFS():

    while q:
        item = q.popleft()
        day = box[item[0]][item[1]][item[2]] + 1
                # i가 floor, j가 세로, k가 가로이다.
                # 이 상태에서 i[0] == floor | i[1] == sero


        for i in range(6):
            nZ = item[0] + dx[i]
            nY = item[1] + dy[i]
            nX = item[2] + dz[i]
            # x, y, z | 행, 열, 높이
            if(nX < 0 or nX >= garo or nY < 0 or nY >= sero or nZ < 0 or nZ >= tall):
                continue

            if(str(box[nZ][nY][nX]) != '0'):
                # 목표는 0이니 0만 찾게 한다.
                continue



            box[nZ][nY][nX] = day
            # 값 비교가 필요하겠는데?

            q.append([nZ, nY, nX])

            

q = deque()

# BFS
for i in range(tall):
    for j in range(sero):
        for k in range(garo):
            if(str(box[i][j][k]) == '1'):
                # 이거 입력 문자열|숫자 여부 잘 봐야함
                q.append([i, j, k])
                # i가 floor, j가 세로, k가 가로이다.
                # 이거 보고나서 BFS 코드 관찰

BFS()
maxValue = 0
isEdible = True
for i in range(tall):
    for j in range(sero):
        for k in range(garo):
            if(str(box[i][j][k]) == '0'):
                isEdible = False
                
            maxValue = max(maxValue, int(box[i][j][k]))


if(isEdible):
    print(str(maxValue - 1))
else:
    print("-1")

'문제풀이' 카테고리의 다른 글

[PY] 14888 : 연산자 끼워넣기  (0) 2025.04.01
[PY] <!> 1707 : 이분 그래프  (0) 2025.04.01
[PY] 2718 : 미로 찾기  (0) 2025.03.31
[PY] 21606 : 아침 산책  (0) 2025.03.31
[PY] 11725 : 트리의 부모 찾기  (0) 2025.03.31