본문 바로가기
Study/Coding Test

[백준] 14502 - 연구소 Python

by 들숨날숨흡 2023. 10. 10.
728x90

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

 

14502번: 연구소

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

www.acmicpc.net

import sys
from collections import deque
import copy

input = sys.stdin.readline

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

def bfs():
    queue = deque()
    tmp_graph = copy.deepcopy(graph)
    for i in range(N):
        for j in range(M):
            if tmp_graph[i][j] == 2:
                queue.append((i, j))

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < N and 0 <= ny < M:
                if tmp_graph[nx][ny] == 0:
                    tmp_graph[nx][ny] = 2
                    queue.append((nx, ny))

    global answer
    ans = 0
    for i in range(N):
        ans += tmp_graph[i].count(0)
    answer = max(answer, ans)
    # print(answer)


def makewall(cnt):
    if cnt == 3:
        bfs()
        return

    for i in range(N):
        for j in range(M):
            if graph[i][j] == 0:
                graph[i][j] = 1
                makewall(cnt + 1)
                graph[i][j] = 0


N, M = map(int, input().split())
graph = []
for i in range(N):
    graph.append(list(map(int, input().split())))
answer = 0
makewall(0)
print(answer)

시간 초과 이슈로 여러번 바꿔서 풀어봤지만.. 결국 Pypy로 제출하니 성공했던 문제.. 다른 사람들의 정답 코드를 봐도 PyPy가 대부분인 것을 보아하니 어쩔수없는 부분인가 보다.. C++을 다시 해야하나.. ㅠ

728x90

'Study > Coding Test' 카테고리의 다른 글

[백준] 1339 - 단어 수학 Python  (0) 2023.10.11
[백준] 11047 - 동전 0 Python  (0) 2023.10.10
[백준] 2156 - 포도주 시식 Python  (0) 2023.10.10
[백준] 1406 - 에디터 Python  (0) 2023.10.10
[백준] 1912 - 연속합 Python  (0) 2023.10.09