728x90

14502번: 연구소
인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크
www.acmicpc.net
n, m = map(int, input().split())
after_gate = [[0] * m for _ in range(n)]
data = []
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
# 정답(바이러스 전파 후에도 살아남은 0의 개수)
result = 0
for _ in range(n):
data.append(list(map(int, input().split())))
def virus(x, y):
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 상, 하, 좌, 우 중에서 바이러스가 퍼질 수 있는 경우
if nx>=0 and nx<n and ny>=0 and ny<m:
if after_gate[nx][ny] == 0:
after_gate[nx][ny] = 2
virus(nx, ny)
# 현재 맵 after_gate에서 안전영역 0의 개수를 구하는 메소드
def calculate():
score = 0
for i in range(n):
for j in range(m):
if after_gate[i][j] == 0:
score += 1
return score
def dfs(count):
global result
# gate 3개 설치하면
if count == 3:
for i in range(n):
for j in range(m):
# 게이트 설치 이후 리스트에 넣어줌
after_gate[i][j] = data[i][j]
# 전파 진행
for i in range(n):
for j in range(m):
if after_gate[i][j] == 2:
virus(i, j)
result = max(result, calculate())
return
# 빈 공간에 울타리 3개 무작위로 설치
for i in range(n):
for j in range(m):
if data[i][j] == 0:
data[i][j] = 1
count += 1
dfs(count)
data[i][j] = 0
count -= 1
# 울타리 수가 0일때부터 시작
dfs(0)
print(result)
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
(Brute Force)백준 2798 블랙잭 - python (0) | 2021.05.16 |
---|---|
(Stack)백준 2504 괄호의 값 - python (0) | 2021.03.31 |
(Floyd)백준 11404 플로이드 - python (0) | 2021.03.15 |
(BFS)백준 18405 경쟁적 전염 - python (0) | 2021.03.13 |
(BFS)백준 18352 특정 거리의 도시 찾기 - python (0) | 2021.03.12 |