Skip to content

Commit 3ce3541

Browse files
committed
3차원 토마토 문제 추가
1 parent 91024b1 commit 3ce3541

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# https://www.acmicpc.net/problem/7569
2+
3+
# 이번문제를 풀면서 알게된 정보
4+
# sys.stdin.readline() 함수를 쓰면 더 빨리 읽을 수 있다.
5+
# max함수의 경우 다차원 배열의 경우 맨앞의 원소값을 비교하여 대소를 판단한다.(값이 같으면 다음원소를 비교)
6+
7+
import sys
8+
from collections import deque
9+
10+
def bfs(queue,box,m,n,h):
11+
12+
dx = [1,0,0,-1,0,0]
13+
dy = [0,1,0,0,-1,0]
14+
dz = [0,0,1,0,0,-1]
15+
16+
while queue:
17+
ori_z,ori_y,ori_x = queue.popleft()
18+
19+
for i in range(6):
20+
x = ori_x + dx[i]
21+
y = ori_y + dy[i]
22+
z = ori_z + dz[i]
23+
24+
if 0<=x<m and 0<=y<n and 0<=z<h:
25+
if box[z][y][x] == 0:
26+
queue.append((z,y,x))
27+
box[z][y][x] = box[ori_z][ori_y][ori_x] + 1
28+
29+
m,n,h = map(int,input().split())
30+
31+
box = [[] for _ in range(h)]
32+
33+
for i in range(h):
34+
for j in range(n):
35+
box[i].append(list(map(int,sys.stdin.readline().split())))
36+
37+
queue = deque()
38+
flag = 0 #0이 유지 될경우 모든 토마토가 익은 경우
39+
40+
for z in range(h):
41+
for y in range(n):
42+
for x in range(m):
43+
if box[z][y][x] == 1:
44+
queue.append((z,y,x))
45+
if box[z][y][x] == 0:
46+
flag = 1
47+
48+
answer = 0
49+
50+
if flag == 0:
51+
print(0)
52+
else:
53+
bfs(queue,box,m,n,h)
54+
for a in box:
55+
for b in a:
56+
for c in b:
57+
if c == 0:
58+
print(-1)
59+
exit(0)
60+
answer = max(answer,max(b))
61+
print(answer-1)

0 commit comments

Comments
 (0)