알고리즘 문제들 으악/백준

[python]7569번 토마토, 7576번의 3차원 버전

빈나 2022. 12. 29. 19:53
반응형

7576번과 다른 부분은 토마토가 2차원 배치가 아닌 3차원 배치라는 점이다.

따라서 가로,세로 외에 높이라는 값을 적용해야했기에 3차 리스트를 만들어

stg[높이][세로][가로]로 토마토 값을 저장해 7576번처럼 시작점이 여러개인 bfs로 풀이를 진행하였다.

 

https://weallbinna.tistory.com/163

 

import sys
from collections import deque
que = deque()
input = sys.stdin.readline
clmn,row,lvl = map(int,input().split())
stg = [[]for i in range(lvl)]
for i in range(lvl):
    for j in range(row):
       stg[i].append(list(map(int,input().split())))
for i in range(lvl):
    for j in range(row):
        for k in range(clmn):
            if stg[i][j][k] == 1:
                    que.append((i,j,k,0))
rst = 0
while que:
    cur = que.popleft()
    rst = cur[3]
    for i in [(cur[0],cur[1]+1,cur[2]),(cur[0],cur[1]-1,cur[2]),(cur[0],cur[1],cur[2]+1),
              (cur[0],cur[1],cur[2]-1),(cur[0]+1,cur[1],cur[2]),(cur[0]-1,cur[1],cur[2])]:
        if 0<=i[0]<lvl and 0<=i[1]<row and 0<=i[2]<clmn and stg[i[0]][i[1]][i[2]] == 0:  #익은 토마토 근처에 안익은 토마토가 있을때
            stg[i[0]][i[1]][i[2]] = 1 #토마토가 익었다
            que.append((i[0],i[1],i[2],cur[3]+1))   #대기열에 추가
for i in range(lvl):    #안익은 토마토가 있는지
    for j in range(row):
        for k in range(clmn):
            if stg[i][j][k] == 0:
                print(-1)
                exit(0)
print(rst)
반응형