bfs를 이용했다. 처음엔 가장자리가 모두 default로 공기인 것을 모르고 가장자리 중 공기가 있는 부분을 찾아 start
리스트에 넣어준 후 bfs를 돌렸는데 실패가 떴다. (0,0)만 넣어주게 바꾸니 바로 성공했는데 왜일까,,
import sys
from collections import deque
# 치즈가 모두 녹아 없어지는 데 걸리는 시간과, 모두 녹기 한 시간 전에 치즈 조각이 놓여있는 칸의 개수를 구하자
sys.setrecursionlimit(11111)
def isCheeze(h, w):
if cheeze[h][w] == 1:
return True
return False
def bfs(group, day):
cheeze = set()
air = set()
for h, w in group:
global visit
visit[h][w] = day
for (i, j) in [(1,0),(-1,0),(0,1),(0,-1)]:
new_h, new_w = (h + i, w + j)
if 0 <= new_h < height and 0 <= new_w < width:
if isCheeze(new_h, new_w) and (visit[new_h][new_w] == -1 or visit[new_h][new_w] > day + 1):
cheeze.add((new_h, new_w))
elif not isCheeze(new_h, new_w) and (visit[new_h][new_w] == -1 or visit[new_h][new_w] > day):
air.add((new_h, new_w))
if air:
bfs(air, day)
if cheeze:
bfs(cheeze, day + 1)
input = sys.stdin.readline
height, width = list(map(int, list(input().strip().split())))
cheeze = [list(map(int, list(input().strip().split()))) for _ in range(height)]
# (x,y)좌표 cheeze => cheeze[y - 1][x - 1]
visit = [[-1] * width for _ in range(height)]
# 처음 가장자리 중 공기가 있는 부분 찾기
start = [(0,0)]
# for h in [0, height - 1]:
# for w in range(0, width):
# if not isCheeze(h, w):
# start.append((h, w))
# for w in [0, width - 1]:
# for h in range(0, height):
# if not isCheeze(h, w):
# start.append((h, w))
day = 0
bfs(start, day)
max = 0
max_count = 0
for h in range(height):
for w in range(width):
if visit[h][w] > max and isCheeze(h, w):
max = visit[h][w]
max_count = 1
elif visit[h][w] == max and isCheeze(h, w):
max_count += 1
print(max)
print(max_count)