본문 바로가기
코테문제/인프런

인프런_토마토(BFS) 문제

by soy_liamin 2022. 12. 16.
반응형

인프런 섹션 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

댓글