728x90
반응형
SMALL
아주 예전에 친구들과 1일 1문제 했을 때 풀었던 문제.
위치값 저장해서 방화벽 놓을 수 있는 모든 경우의 수에 불이 퍼지게 해서 최소값만 리턴하면 끝남.
import sys
import copy
from itertools import combinations
from collections import deque
maxCount = 0
copyGraph = []
def bfs(x, y, n , m):
global copyGraph
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
queue = deque()
queue.append((x, y))
while queue:
x, y = queue.popleft()
for z in range(4):
nx = x + dx[z]
ny = y + dy[z]
if 0 <= nx < n and 0 <= ny < m and copyGraph[nx][ny] == 0 :
copyGraph[nx][ny] = 2
queue.append((nx, ny))
N, M = map(int,sys.stdin.readline().split())
graph = []
emptyAreaLocation = []
for i in range(N):
tmpGraphComponent = list(map(int, sys.stdin.readline().split()))
graph.append(tmpGraphComponent)
for j in range(len(graph)):
for j2 in range(len(graph[j])):
if graph[j][j2] == 0 :
emptyAreaLocation.append([j,j2])
allLocation = list(combinations(emptyAreaLocation,3))
for k in allLocation:
copyGraph = copy.deepcopy(graph)
copyGraph[k[0][0]][k[0][1]] = 1
copyGraph[k[1][0]][k[1][1]] = 1
copyGraph[k[2][0]][k[2][1]] = 1
count = 0
for l in range(len(copyGraph)):
for l2 in range(len(copyGraph[l])):
if copyGraph[l][l2] == 2 :
bfs(l,l2,N,M)
for j in range(len(copyGraph)):
for j2 in range(len(copyGraph[j])):
if copyGraph[j][j2] == 0 :
count +=1
maxCount = max(maxCount, count )
print(maxCount)
728x90
반응형
LIST
'코테' 카테고리의 다른 글
CosPro, PCCP 준비 (0) | 2023.05.05 |
---|---|
자율 주행 자동차 (0) | 2023.03.29 |
외주 수익 최대화하기 (0) | 2023.03.28 |
14500 - 테트로미노 (1) | 2023.03.28 |
바이러스 검사 (0) | 2023.03.28 |