[Baekjoon] 7576 토마토 python

sorzzzzy·2021년 8월 15일
0

Baekjoon Algorithm

목록 보기
38/46
post-thumbnail

🏷 문제


💡 코드

from sys import stdin
from collections import deque

def find():
    case = [[-1,0], [1,0], [0,-1], [0,1]]
    while q:
        x, y = q.popleft()
        for i in range(4):
            newx, newy = x + case[i][0], y + case[i][1]    
            # 범위 확인        
            if 0 <= newx < n and 0 <= newy < m:
                # 익지 않은 토마토라면
                if graph[newx][newy] == 0:
                    # 일수 저장
                    graph[newx][newy] = graph[x][y]+1
                    q.append([newx, newy])

m, n = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]

q = deque()
for i in range(n):
    for j in range(m):
        # 익은 토마토가 있는 위치를 모두 큐에 먼저 넣음
        if graph[i][j] == 1:
            q.append([i,j])

# 익은 토마토 기준으로 탐색 시작
find()

res = 0
for i in range(n):
    for j in range(m):
        # 토마토가 모두 익지 못하는 상황일 때
        if graph[i][j] == 0:
            print(-1)
            exit()
        res = max(res, graph[i][j])
print(res-1)

🔑

전에 풀어봤던 문제인데, 이번 스터디 문제로 있길래 한번 더 풀어봤다!
이걸 어떻게 맞췄지 하면서 새로운 마음으로(?) 다시 풀어봤다 헤헤
일단, 입력받은 그래프를 탐색하면서 익은 토마토를 큐에 넣어준다!
그리고 그 익은 토마토의 위치를 기준으로, 상하좌우를 탐색하며 아직 익지 않은 토마토들을 익게 만들고, 동시에 일수를 업데이트해준다!
큐가 빌 때 까지 반복하고, 그래프를 한번 더 탐색하는데 만약 그래프에 0 값이 있다면 익지 못한 토마토가 하나라도 있다는 뜻 이므로 -1을 출력하고 종료한다!
그렇지 않으면, 탐색하면서 가장 큰 값을 결과값으로 업데이트하며 출력해준다 😃

profile
Backend Developer

0개의 댓글