Post

백준 7569번 토마토2

토마토 문제에서 3차원으로 변경된 경우이다 z로 이동하는 경우의 수를 추가하고 시간초과가 안나오게 줄여줘야한다

토마토 문제에서 for문과 인덱스가 더 많아져서 신경쓰지 않고 풀면 복잡하게 느껴진다 x,y,z를 잘 잡고 문제를 풀어야한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from collections import deque
import sys
input = sys.stdin.readline

#리스트의 위치에는 0 -1 1세가지 경우가 있고 -1은 없는 경우 0은 변하기전 1은 익은 상태이다
#출력 결과 모두 익으면 최소 일수, 모두 익지 못하면 -1, 모두 익어있는 상태이면 0

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

m,n,h = map(int,input().split())
line =[]
q=deque()
#3차원 입력

for i in range(h):
    line_sub=[]
    for j in range(n):
        line_sub.append(list(map(int,input().split())))
        for k in range(m):
            if line_sub[j][k]==1:
                q.append([i,j,k])
    line.append(line_sub)

#line 높이 x,y m==x n ==y
while q:
    x,y,z = q.popleft()
    
    for k in range(6):
        a = x + dx[k] #높이 h
        b = y + dy[k] #세로 n
        c = z + dz[k] #가로 m
        
        if 0<=a<h and 0<=b<n and 0<=c<m and line[a][b][c]== 0:
            line[a][b][c] = line[x][y][z] +1
            q.append([a,b,c])

#마지막 결과에서 -1을 해야한다 처음 1부터 시작하기 때문에     
maax = 0

for i in range(h):
    for j in range(n):
        for t in range(m):
            if line[i][j][t] == 0:
                print(-1)
                exit(0)
        
        if maax < max(line[i][j]):
            maax = max(line[i][j])

print(maax-1)

exit()

시스템에 종료 여부를 보낸다 무조건 종료되므로 출력까지 하고 더이상 반복할 필요가 없을때 사용하면 시간을 절약할 수 있다

continue 는 현재 반복을 패스하고 다음 반복으로 넘어가고 braek는 현재 반복문을 빠져나갈때 사용하는데 모든 반복문을 빠져나가고 프로그램을 종료시킬때는 exit를 이용하자

This post is licensed under CC BY 4.0 by the author.