코딩하는 해맑은 거북이

[Python] 토마토 - 백준 (BFS) 본문

코딩테스트

[Python] 토마토 - 백준 (BFS)

#CJE 2023. 8. 11.
해당 글은 백준 7576번 문제 '토마토'를 다룬다.

문제

https://www.acmicpc.net/problem/7576

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net

 

설명

해당 문제는 BFS로 해결할 수 있는 문제이다.

n, m을 입력받을 때, 헷갈려서 c, r로 변수명을 바꿔서 입력받았다..!

주의할 점은 익은 토마토인 1의 모든 위치에서 바이러스처럼 전파되므로 queue에 익은 토마토의 위치를 모두 넣어준 상태에서 bfs를 진행해야한다.

 

코드

from collections import deque

c, r = map(int, input().split())
box = []
for i in range(r):
    box.append(list(map(int, input().split())))

dx = [-1, 1, 0, 0]
dy = [0, 0, 1, -1]
q = deque()

def bfs():
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx >= 0 and nx < r and ny >= 0 and ny < c:
                if box[nx][ny] == 0:
                    box[nx][ny] = box[x][y] + 1
                    q.append((nx, ny))


for i in range(r):
    for j in range(c):
        if box[i][j] == 1:
            q.append((i, j))

bfs()

zero_count = sum(box[i].count(0) for i in range(r))
if zero_count == 0:
    print(max(map(max, box)) - 1)
else:
    print(-1)

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 토마토(2) - 백준 (BFS)  (0) 2023.08.12
[Python] 적록색약 - 백준 (BFS)  (0) 2023.08.12
[Python] 그림 - 백준 (DFS)  (0) 2023.08.11
[Python] 절댓값 힙 - 백준  (0) 2023.08.11
[Python] 베르트랑 공준 - 백준  (0) 2023.08.11
Comments