백준 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.