토니의 연습장

(중요) 14502 - 바이러스 확산 본문

Algorithm/CH 5. 응용 문제

(중요) 14502 - 바이러스 확산

bellmake 2025. 11. 6. 10:03

https://www.acmicpc.net/problem/14502

from collections import deque
from itertools import combinations

N, M = map(int, input().split())
B = [[] for _ in range(N)]

for i in range(N):
    B[i] = list(map(int, input().split()))
    
cells = [(i,j) for i in range(N) for j in range(M) if B[i][j]==0]
max_safe = 0
for combination in combinations(cells, 3):
    for row, col in combination:
        B[row][col] = 1
        
    visit = [[False]*M for _ in range(N)]
    queue = deque()
    
    for i in range(N):
        for j in range(M):
            if B[i][j] == 2:
                queue.append((i,j))
                visit[i][j] = True
                
    dr = [1,-1,0,0]
    dc = [0,0,1,-1]
    
    while len(queue) != 0:
        r, c = queue.popleft()
        
        for i in range(4):
            nr = r+dr[i]
            nc = c+dc[i]
            if nr < 0 or N <= nr or nc < 0 or M <= nc:
                continue
            if B[nr][nc] == 1:
                continue
            if not visit[nr][nc]:
                queue.append((nr,nc))
                visit[nr][nc] = True
                
    safe = 0
    for i in range(N):
        for j in range(M):
            if B[i][j] == 0 and not visit[i][j]:
                safe += 1
                
    max_safe = max(max_safe, safe)
    
    for row, col in combination:
        B[row][col] = 0
        
print(max_safe)

'Algorithm > CH 5. 응용 문제' 카테고리의 다른 글

정수 입력받기 참고  (0) 2025.02.22
독특한 이중 list comprehension 접근방법  (0) 2025.02.22
2. 백준 1932  (1) 2025.01.04
1. 백준 11053  (1) 2025.01.04