-
[백준] 7576번 문제 (토마토) 파이썬(Python) 풀이Problem Solving/Baekjoon 2021. 9. 6. 10:45
https://www.acmicpc.net/problem/7576
from collections import deque import sys input = sys.stdin.readline m, n = map(int, input().split()) tomatos = [list(map(int, input().split())) for _ in range(n)] queue = deque() for i in range(n): for j in range(m): if tomatos[i][j] == 1: queue.append([i, j]) xx = [1, -1, 0, 0] yy = [0, 0, 1, -1] while queue: row, col = queue.popleft() for k in range(4): _row = row + yy[k] _col = col + xx[k] if 0 <= _row < n and 0 <= _col < m and tomatos[_row][_col] == 0: tomatos[_row][_col] = tomatos[row][col] + 1 queue.append([_row, _col]) result = -2 is_not_grow = False for tomato_one_line in tomatos: for tomato in tomato_one_line: if tomato == 0: is_not_grow = True result = max(result, tomato) if is_not_grow: print(-1) elif result == -1: print(0) else: print(result - 1)
입력받은 토마토들을 순회하면서 그 토마토가 익은 토마토면(1이면) queue에 담아준다.
그 후 bfs를 통해 동, 서, 남, 북을 탐색하며 익지 않은 토마토일시 += 1을 해주어 익은 토마토로 표시를 바꿔준다.
이렇게 bfs가 끝날 때까지 반복하면 입력 받은 토마토 배열에서 제일 큰 값을 기준으로 정답을 구한다.
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 1991번 문제 (트리 순회) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 2178번 문제 (미로 탐색) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 4963번 문제 (섬의 개수) 파이썬(Python) 풀이 (0) 2021.09.06 [백준] 2667번 문제 (단지번호붙이기) 파이썬(Python) 풀이 (0) 2021.09.02 [백준] 9466번 문제 (텀 프로젝트) 파이썬(Python) 풀이 (0) 2021.09.02