# 토마토들이 바이러스처럼 익힌 애들로 인해 다른 애들도 익음
# 바이러스처럼 퍼져나가고, 최소 일수(거리)니까 bfs사용
- exit(0) : 성공적으로 프로그램을 종료
- exit(1) : 성공적으로 프로그램을 종료하지 못함
from collections import deque
q = deque()
dx = [1, -1, 0, 0]
dy = dx[::-1]
# 토마토 상자의 크기
m, n = map(int, input().split())
tomato = [list(map(int, input().split())) for _ in range(n)]
for i in range(n):
for j in range(m):
# 익은 토마토가 여러 곳에 있을 수 있으니 익은 토마토의 위치를 큐에 먼저 집어넣기
if tomato[i][j] == 1:
q.append((i, j))
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 범위 안에 있으면서, 안익은 토마토가 있다면
if 0 <= nx < n and 0 <= ny < m:
if tomato[nx][ny] == 0:
tomato[nx][ny] = tomato[x][y] +1
q.append((nx, ny))
# 토마토가 다 익었다면, 그때의 최소날짜 출력위한 변수
result = -2
# 안 익은게 있는지 체크할 변수(0 : 모두 익은 상태, -1 : 모두 익지 못한 상태)
flag = 0
for i in range(n):
for j in range(m):
# 안 익은 토마토가 있다면 flag에 1대입
if tomato[i][j] == 0:
flag = -1
result = max(result, tomato[i][j])
# 토마토가 안 익었을 때,
if flag == -1:
print(-1)
# 토마토가 모두 익었을 때,
# 1. 애초에 모두 익혀져 있어, 익힐 필요가 없는 경우(result=1인경우가 최대) - 0출력
# 2. 최소 일 수 출력
elif flag == 0:
if result == 1:
print(0)
else:
print(result-1) # 1부터 시작했으니 -1해주기
from collections import deque
q = deque()
dx = [1, -1, 0, 0]
dy = dx[::-1]
# 토마토 상자의 크기
m, n = map(int, input().split())
tomato = [list(map(int, input().split())) for _ in range(n)]
for i in range(n):
for j in range(m):
# 익은 토마토가 여러 곳에 있을 수 있으니 익은 토마토의 위치를 큐에 먼저 집어넣기
if tomato[i][j] == 1:
q.append((i, j))
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 범위 안에 있으면서, 안익은 토마토가 있다면
if 0 <= nx < n and 0 <= ny < m:
if tomato[nx][ny] == 0:
tomato[nx][ny] = tomato[x][y] +1
q.append((nx, ny))
# 토마토가 다 익었다면, 그때의 최소날짜 출력위한 변수
result = 0
for i in range(n):
for j in range(m):
# 안 익은 토마토가 있다면 flag에 1대입
if tomato[i][j] == 0:
print(-1)
exit(0) # 만약, 익지 않은 토마토가 있을 때, 바로 프로그램 종료
result = max(result, tomato[i][j])
print(result -1)
'Algorithm_PYTHON' 카테고리의 다른 글
| [백준_파이썬]11724번_연결 요소의 개수 (0) | 2021.08.24 |
|---|---|
| [백준_파이썬]1697번_숨바꼭질 (0) | 2021.08.24 |
| [백준_파이썬]2667번_단지번호붙이기 (0) | 2021.08.24 |
| [백준_파이썬]2178번_미로탐색 (0) | 2021.08.23 |
| [백준_파이썬]2606번_바이러스 (0) | 2021.08.22 |