[Boj문제풀이]

[Boj/백준] 14502 Python

ki7348 2021. 9. 23. 19:54

문제출처: https://www.acmicpc.net/problem/14502

 

14502번: 연구소

인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크

www.acmicpc.net

 

 

1. 문제 접근 방식

처음에는 어떻게 할지 막막하다가 케이스가 적기때문에 브루트포스로 풀기로 했다.

0의 개수를 combination으로 받아 벽을 세울 수 있는 케이스의 개수를 구한다.

for문을 순회하면서 2에 대해서 BFS를 수행한다.

 

 

2. 내가 푼 코드

import sys
from collections import deque
from itertools import combinations
import copy

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]


n, m = map(int,sys.stdin.readline().split())

graph = []

for _ in range(n):
    graph.append(list(map(int,sys.stdin.readline().split())))



zero_list = []
for i in range(n):
    for j in range(m):
        if graph[i][j] == 0:
            zero_list.append([i,j])

comb_zero_list = list(combinations(zero_list,3))

def bfs(x,y):
    queue = deque()
    queue.append((x,y))
    

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x+dx[i]
            ny = y+dy[i]
            if nx<0 or nx>=n or ny<0 or ny>=m:
                continue
            if temp_graph[nx][ny] == 0:
                queue.append((nx,ny))
                temp_graph[nx][ny] = 2
arr=[]
for comb in comb_zero_list:
    count = 0
    temp_graph = copy.deepcopy(graph)
    temp_graph[comb[0][0]][comb[0][1]] = 1 
    temp_graph[comb[1][0]][comb[1][1]] = 1
    temp_graph[comb[2][0]][comb[2][1]] = 1
    
    for i in range(n):
        for j in range(m):
            if temp_graph[i][j] == 2:
                bfs(i,j)
    
    for i in range(n):
        for j in range(m):
            if temp_graph[i][j] == 0:
                count+=1

    arr.append(count)

print(max(arr))

 

 

3. 결과 및 느낀점

처음에 어떻게 풀지 몰라서 막막했는데

DFS&BFS문제에는 브루트포스를 자주 사용하는 것 같다.

케이스가 적다면 당황하지말고 모든 경우의 수 다 체크하자.

그래프의 원소들이 계속 바뀌면 deepcopy를 해주자.

 

'[Boj문제풀이]' 카테고리의 다른 글

[Boj/백준] 1743 Python  (0) 2021.09.26
[Boj/백준] 3187 Python  (0) 2021.09.24
[Boj/백준] 10026 Python  (0) 2021.09.23
[Boj/백준] 2583 Python  (0) 2021.09.22
[Boj/백준] 14716 Python  (0) 2021.09.21