[백준] #7576 Python

Jiyoon·2021년 7월 26일
0

Algorithm

목록 보기
1/24

백준 7576번 - 토마토

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

풀이 방식(BFS)

  • 토마토가 익는 과정: queue에 조건에 맞는 주변 토마토 위치를 넣어준다.
  • 날짜 세는 방식: queue에 토마토 위치를 넣을 때 해당 날짜를 같이 넣어준다, 다음 날짜의 토마토는 day + 1 을 해주며 날짜를 갱신해나간다.

핵심 코드

while queue:
        x, y, day = queue.pop()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < M and 0 <= ny < N and array[ny][nx] == 0:
                array[ny][nx] = 1
                queue.appendleft((nx, ny, day + 1))
            else:
                pass

전체 코드

import sys
from collections import deque
input = sys.stdin.readline

def BFS(array):
    global day
    while queue:
        x, y, day = queue.pop()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < M and 0 <= ny < N and array[ny][nx] == 0:
                array[ny][nx] = 1
                queue.appendleft((nx, ny, day + 1))
            else:
                pass
    
    for i in array:
        for s in i:
            if s == 0:
                return -1
                
    return day


M, N = map(int, input().split())
container = []
for i in range(N):
    container.append(list(map(int, input().split())))

dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]

day = 0
queue = deque([])
for i in range(N):
    for s in range(M):
        if container[i][s] == 1:
            queue.appendleft((s, i, day))


answer = BFS(container)
print(answer)

이중 for문을 빠져나올 땐 함수의 return을 이용하는 것이 편리하다.
이전에는 sys.exit()을 사용해서 빠져나오려 했었다(프로그램 자체를 종료시켜버리는 것이라 오류가 발생할 수도 있다,,)

0개의 댓글