문제:

2019/10/29 - [Algorithm/Python] - [BOJ]7576. 토마토

 

 위 문제에서 더 발전한 문제로 이제 한 층이 아닌 여러 층에 대해서 토마토가 익는 것이 전이된다.

입력:

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2<=M<=100,2<=N<=100,1<=H<=100이다. 둘째 줄부터는 가장 밑의 상자부터 가장 위의 상자까지에 저장된 토마토들의 정보가 주어진다. 즉, 둘째줄부터 N개의 줄에는 하나의 상자에 담긴 토마토의 정보가 주어진다. 각 줄에는 상자 가로줄에 들어있는 토마토들의 상태가 M개의 정수로 주어진다. 정수 1은 익은 토마토, 정수 0은 익지 않은 토마토, 정수 -1은 토마토가 들어있지 않은 칸을 나타낸다. 이러한 N개의 줄이 H번 반복하여 주어진다.

출력: 

여러분은 토마토가 모두 익을 때까지 최소 며칠이 걸리는지를 계산하여 출력해야 한다. 만약, 저장될 때부터 모든 토마토가 익어있는 상태이면 0을 출력해야 하고, 토마토가 모두 익지는 못하는 상황이면 -1을 출력해야 한다.

풀이방법:

 이전문제에선 2차원 배열로 받았지만, 이번에는 3차원 배열로 작성한다. 또한 위, 아래로도 이동해야 하기 때문에 dx,dy,dn 세 가지 변수를 사용했다. 이외에는 이전문제와 동일한 풀이로 풀었다.

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
import sys
m,n,h=map(int,sys.stdin.readline().split())
tomatos=[]
for j in range(h):
    temp=[]
    for i in range(n):
        t=list(map(int,sys.stdin.readline().split()))
        temp.append(t)
    tomatos.append(temp)
queue=[]
for k in range(h):
    for i in range(n):
        for j in range(m):
            if tomatos[k][i][j]==1:
                queue.append((k,i,j))
dx=[0,0,0,0,-1,1]
dy=[0,1,0,-1,0,0]
dh=[1,0,-1,0,0,0]
count=0
while len(queue)!=0:
    count+=1
    temp=[]
    change=False
    for k,i,j in queue[:]:
        for c in range(6):
            nx=j+dx[c]
            ny=i+dy[c]
            nh=k+dh[c]
            if 0<= ny < n and 0<= nx < m and 0<=nh < h:
                if tomatos[nh][ny][nx]==0:
                    tomatos[nh][ny][nx]=1
                    temp.append((nh,ny,nx))
                    change=True
    queue.pop(0)
    queue=temp
    if not change:
        break
        
remain=False
for k in range(h):
    for i in range(n):
        for j in range(m):
            if tomatos[k][i][j]==0:
                remain=True
                break
if not remain:
    print(count-1
else:
    print(-1)
cs

문제링크:

https://www.acmicpc.net/problem/7569

'Algorithm > Python' 카테고리의 다른 글

[BOJ]14848. 정수 게임  (0) 2019.11.04
[BOJ] 1325. 효율적인 해킹  (0) 2019.10.31
[BOJ]7576. 토마토  (0) 2019.10.29
[BOJ]1049. 기타줄  (0) 2019.10.18
[BOJ]5567. 결혼식  (0) 2019.10.17

+ Recent posts