본문 바로가기

Coding test

[백준/7576/파이썬] 토마토


소스코드

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

 

[백준 7569/파이썬] 토마토

소스코드 import sys from collections import deque m,n,h = map(int,input().split()) graph = [] queue = deque([]) for i in range(h): tmp = [] for j in range(n): tmp.append(list(map(int,sys.stdin.readline().split()))) for k in range(m): if tmp[j][k]==1: q

codekunst.tistory.com