우선 문제 자체는 전체 연구소 지도에 벽 3개를 세워 바이러스가 퍼지는 공간을 최소화 하는 문제이다. 언뜻 보기에 쉬워보였지만 생각보다 애를 먹었다. BFS를 이용해서 벽을 세운 뒤의 안전구역을 세는 건 손쉽게 작성했지만 벽을 세우는 부분에서 막혀버렸다. 결국 다른 사람의 코드를 참고하고 나서야 함수를 재귀적으로 활용하면 된다는 걸 깨달았다.
풀이 코드
from collections import deque
import copy
def bfs():
q = deque()
test_lab = copy.deepcopy(lab)
for i in range(n):
for j in range(m):
if test_lab[i][j] == 2:
q.append((i,j))
while q:
x, y = q.popleft()
for i in range(4):
mx = x + dx[i]
my = y + dy[i]
if mx < 0 or mx >= n or my < 0 or my >=m:
continue
if test_lab[mx][my] == 0:
if test_lab[x][y] == 2:
test_lab[mx][my] = 2
q.append((mx, my))
global answer
temp = 0
for i in test_lab:
temp += i.count(0)
answer = max(answer, temp)
def wall(cnt):
if cnt == 3:
bfs()
return
for i in range(n):
for j in range(m):
if lab[i][j] == 0:
lab[i][j] = 1
wall(cnt+1)
lab[i][j] = 0
answer = 0
n,m = map(int,input().split())
lab = []
dx = [1,-1,0,0]
dy = [0,0,1,-1]
cnt = 0
for _ in range(n):
lab.append(list(map(int,input().split())))
wall(0)
print(answer)