bj 7569 토마토

coh·2022년 6월 16일
0

백준

목록 보기
21/27

아... ㅋㅋㅋ 문제를 다 풀고 마지막에 디버깅 하느라 넣어놓은 print 함수를 안 빼서 출력초과로 2번 틀림 ㅠㅠㅠㅠㅠㅠ 내 정답률...

이 문제는 이전 토마토 문제와 완전 똑같음
BFS로 해야하는 것은 당연하고
그냥 3차원으로 데이터를 처리하기만 하면 끝!

근데 이전에 했던 것을 보다가 이 부분을 밖으로 빼면 더 code가 간결해지겠다 싶은 부분들을 수정했음! 예를 들어 BFS에서 그냥 deque를 선언하고 append 했는데 밖에서 그냥 for loop 돌릴 때 append 해버렸음.

📌이 문제의 핵심은 이전 토마토 문제와 똑같기 때문에
3차원 배열을 잘 이해하고 있는지가 관건이었음.

📌3차원 배열을 만드는 방법에서 나는 시간이 좀 걸렸는데 2차원 배열을 만들고 append 하면 되겠다 싶었는데 계속 이상하게 append 되어서 ㅋㅋㅋㅋ.. 이것만 해결하면 되는데...!! 데이터가 계쏙 이상하게 담겼음 ㅠㅠ

import sys
from collections import deque

def isvalid(graph, row, col, height):
    if row < 0 or row >= n:
        return False
    if col < 0 or col >= m:
        return False
    if height < 0 or height >= h:
        return False
    if graph[height][row][col] != 0:
        return False

    return True


def bfs(graph, queue):

    dx = [1,-1,0,0,0,0]
    dy = [0,0,1,-1,0,0]
    dz = [0,0,0,0,1,-1]
    while queue:
        z, x, y= queue.popleft()

        for j in range(6):
            nx = x + dx[j]
            ny = y + dy[j]
            nz = z + dz[j]
            if isvalid(graph, nx, ny, nz):
                queue.append([nz, nx, ny])
                graph[nz][nx][ny] = graph[z][x][y] + 1


m, n, h = map(int, input().split())
graph = []
queue = deque([])

for i in range(h):
    tmp = []
    for j in range(n):
        tmp.append(list(map(int, sys.stdin.readline().split())))
        for k in range(m):
            if tmp[j][k] == 1:
                queue.append([i, j, k])
    graph.append(tmp)


bfs(graph, queue)
cnt = 0
for i in graph:
    for j in i:
        for k in j:
            if k == 0:
                print(-1)
                exit(0)
        cnt = max(cnt, max(j))
print(cnt -1)
profile
Written by coh

0개의 댓글