백준 7569번: 토마토



[www.acmicpc.net/problem/7569]

#풀이

- bfs알고리즘

1. 입력을 3차원 배열로 받아주고, 처음에 존재하는 토마토의 위치를 파악한다.

2. bfs알고리즘 실행

3. 배열에 0 이 존재하면 -1을 출력하고, 0이 없으면 배열의 최댓값 -1을 출력한다.

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
import sys
from collections import deque
input = lambda : sys.stdin.readline().rstrip()
 
x,y,z=map(int,input().split())
tomato=[[list(map(int,input().split())) for _ in range(y)] for _ in range(z)]
 
#이동 가능
dx=[1,-1,0,0,0,0]
dy=[0,0,1,-1,0,0]
dz=[0,0,0,0,1,-1]
 
def bfs():
    while queue:
        a,b,c=queue.popleft()
        for i in range(6):
            da=a+dz[i]
            db=b+dy[i]
            dc=c+dx[i]
            if 0<=da<and 0<=db<and 0<=dc<and not tomato[da][db][dc]:
                tomato[da][db][dc]=tomato[a][b][c]+1
                queue.append((da,db,dc))
 
    #며칠 지났는지 혹은 안익은 토마토 있는지 판단 
    max=0
    for i in range(z):
        for j in range(y):
            for k in range(x):
                if tomato[i][j][k] > max:
                    max=tomato[i][j][k]
                elif not tomato[i][j][k]:
                    return -1
    return max-1
 
queue=deque()
#처음에 있는 토마토 판정
for i in range(z):
    for j in range(y):
        for k in range(x):
            if tomato[i][j][k]==1:
                queue.append((i,j,k))
#출력
print(bfs())
cs


댓글 쓰기

Post a Comment (0)

다음 이전