728x90
# 출처 : https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
# 풀이
# 코드
from collections import deque
M, N = map(int, input().split())
Arr = [list(map(int, input().split())) for _ in range(N)]
position=deque() #파이썬 라이브러리를 사용하지 않아, 시간초과에 늪에 빠졌었다
for i in range(N):
for j in range(M):
if Arr[i][j]==1: #익은 토마토의 위치만 표기하기 위해
position.append((i, j))
#상하좌우
dx=[-1, 1, 0, 0]
dy=[0, 0, -1, 1]
while position: #익은 토마토만 탐색
i, j = position.popleft()
for (v, w) in zip(dx, dy):
nx, ny=i+v, j+w
if 0<=nx<N and 0<=ny<M: #범위 내에
if Arr[nx][ny]==0: #익지 않은 토마토가 있다면,
position.append((nx, ny)) #곧 익을 것이기 때문에 익은 토마토로 표기
Arr[nx][ny] = Arr[i][j] + 1 #이전 값에 1을 더하여 며칠이 지났는지 확인할 수 있음
total = Arr[0][0] #최대값 기준 찾기
for i in range(N):
for j in range(M):
if Arr[i][j] == 0: #익지 않은 토마토가 있다면,
print(-1) #모두 익지 못하는 상황이라고 출력
exit() #시스템 종료
total = max(Arr[i][j], total) #최대값 찾기
print(total-1) #익은 토마토가 1이기 때문에, 1이 하나 더해졌으므로 1을 빼줌
728x90
'algorithm > baekjoon' 카테고리의 다른 글
[BOJ] 1149 RGB거리 (python) (0) | 2021.09.29 |
---|---|
[BOJ] 1697 숨바꼭질 (python) (0) | 2021.09.29 |
[BOJ] 2667 단지번호붙이기 (python) (0) | 2021.09.29 |
[BOJ] 2178 미로탐색 (python) (0) | 2021.09.29 |
[BOJ] 14502 연구소 (python) (0) | 2021.09.29 |