토니의 연습장
(중요) 14502 - 바이러스 확산 본문
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 |
