[Python] 백준7569번 : 토마토

hjeu·2025년 2월 23일

백준

목록 보기
41/48
post-thumbnail

💡문제

백준 7569번 문제 링크

🍀풀이

이 문제는 7576번 토마토랑 같은 문제인데, 저번 문제는 2차원에서의 BFS이고 이번 문제는 3차원에서의 BFS 문제이다.
그래서 풀이는 같아서 z축을 고려해서 문제를 풀면 된다.

import sys
from collections import deque

input = sys.stdin.readline

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

dx = [0, 0, -1, 1, 0, 0]
dy = [1, -1, 0, 0, 0, 0]
dz = [0, 0, 0, 0, 1, -1]

queue = deque()

# 모든 익은 토마토(1) 위치 큐에 추가
for i in range(h):
    for j in range(n):
        for k in range(m):
            if graph[i][j][k] == 1:
                queue.append((i, j, k))

# BFS 실행
def bfs():
    while queue:
        x, y, z = queue.popleft()
        for i in range(6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]
            if 0 <= nx < h and 0 <= ny < n and 0 <= nz < m and graph[nx][ny][nz] == 0:
                queue.append((nx, ny, nz))
                graph[nx][ny][nz] = graph[x][y][z] + 1  # 방문 체크

bfs()

# 최대 날짜 계산
result = 0
for i in range(h):
    for j in range(n):
        for k in range(m):
            if graph[i][j][k] == 0:  # 익지 않은 토마토가 있다면
                print(-1)
                exit(0)
            else:
                result = max(result, graph[i][j][k])

print(result - 1)

BFS 푸는건 그대로인데 살짝 애를 먹은건 for문의 범위이다... 이게 가로, 세로, 높이로 for문을 돌리다보니 헷갈려서 자꾸 틀렸다... 다른 문제 풀면서도 느낀거였는데 떼잉..


profile
나는야 개발왕이 될거야! (๑ •̀ω•́)۶

0개의 댓글