백준 - 그래프(# 7576)

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


Code

m, n = map(int, input().split())

boxes = []
for _ in range(n):
    boxes.append(list(map(int, input().split())))

stack = []
for i in range(n):
    for j in range(m):
        if boxes[i][j] == 1:
            stack.append([i,j])

cnt = 0
while True:
    nxt_stack = []
    while stack:
        x, y = stack.pop()
        if x > 0 and boxes[x-1][y] == 0:
            boxes[x-1][y] = 1
            nxt_stack.append([x-1,y])
        if x < n-1 and boxes[x+1][y] == 0:
            boxes[x+1][y] = 1
            nxt_stack.append([x+1,y])
        if y > 0 and boxes[x][y-1] == 0:
            boxes[x][y-1] = 1
            nxt_stack.append([x,y-1])
        if y < m-1 and boxes[x][y+1] == 0:
            boxes[x][y+1] = 1
            nxt_stack.append([x,y+1])

    if nxt_stack :
        stack = nxt_stack
        cnt += 1
    else :
        break

for i in range(n):
    if 0 in boxes[i]:
        cnt = -1
        break

print(cnt)

참고

그날 익은 토마토를 stack에 넣고, 그 다음날 익을 토마토로 업데이트 해주며 익을 수 있는 토마토를 모두 익힌 뒤, 결과를 확인한다.

좋은 웹페이지 즐겨찾기