백준 7576번 바로가기
나의 풀이#
from collections import deque
# 입력
m,n=map(int,input().split())
tomato = [list(map(int,input().split())) for _ in range(n)]
queue = deque([])
dx = [-1,1,0,0]
dy = [0,0,-1,1]
# 처리
for i in range(n):
for j in range(m):
if tomato[i][j] == 1:
queue.append([i,j])
def ripe():
while queue:
x,y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m and tomato[nx][ny] == 0:
tomato[nx][ny] = tomato[x][y] + 1
queue.append([nx,ny])
ripe()
for i in range(n):
for j in range(m):
if tomato[i][j] == 0:
print(-1)
exit(0)
print(max(map(max, tomato))-1)
CODE REVIEW#
- 2606번-바이러스문제와 1012번-유기농 배추와 결이 같은 문제. graph 문제를 풀다보니 이제는 다 비슷비슷해 보인다.
- stack에 익어있는 토마토를 집어놓고 하나씩 꺼내가며 옆의 토마토들을 익히는 과정을 반복한다. 모두 반복하고 마지막 결과물에서 익지 않은 토마토가 있는지 확인하고, 최댓값을 출력한다.
- 논리상에 문제가 없는데 2%에서 자꾸
틀렸습니다
라길래 코드를 살펴봐도 문제를 찾을 수 없었다. 알고보니 출력 부분에서 최대값을 찾는 과정에서 문제가 생긴 것!
- 2차원 배열의 경우 그냥
max(max(array))
로 구하면 안되고, max(map(max,array))
로 구해야 한다.
- 7569번 토마토는 3차원 배열이던데 이것도 도전해보자.