반응형
인프런 섹션 7 -15번 토마토(BFS)문제
import sys
sys.setrecursionlimit(10**6)
from collections import deque
#왼,위,오,아래 좌표
dx = [-1,0,1,0]
dy = [0,1,0,-1]
#n : 상자의 세로
#m : 상자의 가로
n,m = map(int,sys.stdin.readline().split())
# 1:익토, 0:익지않은토, -1:토마토없음
box = [list(map(int,sys.stdin.readline().split())) for _ in range(m)]
dis = [[0]*n for _ in range(m)] #익는데 걸리는 일수
Q = deque()
for i in range(m):
for j in range(n):
if box[i][j] == 1:
Q.append((i,j)) #시작점 append
dis[i][j] = 0 #익는데 걸리는 날짜
while Q:
tmp = Q.popleft()
for p in range(4):
a = tmp[0]+dx[p]
b = tmp[1]+dy[p]
if 0<=a<m and 0<=b<n and box[a][b]==0:
box[a][b] = 1
dis[a][b] = dis[tmp[0]][tmp[1]] + 1
Q.append((a,b))
flag = 1 #flag 가 '1'이면 위의 코드 수행한 결과
for i in range(m):
for j in range(n):
if box[i][j] == 0: #flag 가 '0'이면 익지못하는 상황
flag =0 #익지못하는상황
if flag ==1:
print(max(map(max,dis))) #2차원배열에서 max값 구하는방법
elif flag==0:#익지못하는상황
print(-1)
else:
print(0)
반응형
'코테문제 > 인프런' 카테고리의 다른 글
인프런_사다리타기(DFS) (0) | 2022.12.16 |
---|
댓글