-
14502 연구소코테 대비 python/백준 2023. 3. 7. 22:46
https://www.acmicpc.net/problem/14502
14502번: 연구소
인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크
www.acmicpc.net
#1. 안전지대를 찾는 것은 일반적인 bfs로 찾으면됨 문제는 벽 3개를 어떻게 세울꺼야?? #2. 조합을 이용해서 빈칸에 3개를 세우는 모든 경우의수를 구함 => 즉 벽세우고 bfs돌리기 #import sys from collections import deque from itertools import combinations #주어진 조건 받기 n,m = map(int,input().split()) graph=[] for _ in range(n): graph.append(list(map(int,input().split()))) blank =[] virus = [] #방향설정 상하좌우 dx=[-1,1,0,0] dy=[0,0,-1,1] #bfs함수 만들기 result = 0 def bfs(): global result #안전지대에서 벽3개 세웠으니 3개 빼줘야함 cnt = len(blank)-3 #바이러스인 애들 q= deque(virus) #print(q) #for x,y in virus: # q.append((x,y)) while q: x,y = q.popleft() for i in range(4): nx = x+dx[i] ny = y+dy[i] #범위랑 조건 맞아?? if 0<=nx<n and 0<=ny<m and new_graph[nx][ny]==0: #바이러스 감염으로 바꿔주고 new_graph[nx][ny]=2 #큐에 넣어주고 q.append((nx,ny)) #안전지대 빼주고 cnt-=1 result = max(result,cnt) #벽세울수 있는 곳 받기 for i in range(n): for j in range(m): if graph[i][j]==0: blank.append((i,j)) elif graph[i][j]==2: virus.append((i,j)) #가능한 조합들 possi = combinations(blank,3) from copy import deepcopy for new in possi: new_graph = deepcopy(graph) #벽세우기 for x,y in new: new_graph[x][y]=1 bfs() print(result)
'코테 대비 python > 백준' 카테고리의 다른 글
13459 구슬탈출 (0) 2023.03.09 2206 벽 부수고 이동하기 (0) 2023.03.08 1260 dfs bfs (0) 2023.03.07 17086 아기상어2 (0) 2023.03.07 1743 음식물 피하기 bfs (0) 2023.02.27