Post

백준 7569번 토마토2

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

토마토 문제에서 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.