소스코드
from collections import deque
m, n = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(n)]
queue = deque([])
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
res = 0
for i in range(n):
for j in range(m):
if matrix[i][j] == 1:
queue.append([i, j])
def bfs():
while queue:
x, y = queue.popleft()
for i in range(4):
nx, ny = dx[i] + x, dy[i] + y
if 0 <= nx < n and 0 <= ny < m and matrix[nx][ny] == 0:
matrix[nx][ny] = matrix[x][y] + 1
queue.append([nx, ny])
bfs()
for i in matrix:
for j in i:
if j == 0:
print(-1)
exit(0)
res = max(res, max(i))
print(res - 1)
알고리즘
예전에 풀었던 문제인것 같아서 다시보니 2차원으로 푸는 문제였다. 이게 골드 5라니 손쉽게 풀려서 성장함을 느낄수 있었다. 토마토 하나를 가지고 상하좌우를 탐색해나가며 푸는 문제이다. 자세한 설명은 밑에 링크에 있다. :)
https://codekunst.tistory.com/5
'Coding test' 카테고리의 다른 글
[백준/14225/파이썬] 부분수열의 합 (2) | 2023.01.20 |
---|---|
[백준/2468/파이썬] 안전영역 - DFS(재귀) (0) | 2023.01.19 |
[백준/14500/파이썬] 테트로미노 (0) | 2023.01.17 |
[백준/16922/파이썬] 로마 숫자 만들기 (0) | 2023.01.16 |
[백준/11048/파이썬] 이동하기 - DP (0) | 2023.01.15 |