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

+ Recent posts