티스토리 뷰
반응형
https://www.acmicpc.net/problem/14502
14502번: 연구소
인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크
www.acmicpc.net
⊙ 문제
⊙ 입력
⊙ 출력
⊙ 예제 입출력
⊙ 알고리즘 분류
- 그래프 이론
- 그래프 탐색
- 브루트포스 알고리즘
- 너비 우선 탐색
⊙ 문제 접근 과정
재귀를 통해 벽을 세우고 3개를 다 세웠으면 그때 bfs를 돌린다.
bfs는 바이러스를 기준으로 퍼져나가게 코드를 짜주었고, count 함수를 사용하여 0의 개수를 출력해준다.
0은 안전지역이다. 안전지역이 가장 많은 값을 ans에 저장해 주어 브루트 포스, 모든 경우에서 가장 많은 안전 영역을 가진 경우를 찾아낸다.
⊙ 문제 풀이
import sys
import copy
from collections import deque
input = sys.stdin.readline
dx = [0,0,-1,1]
dy = [1,-1,0,0]
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
ans = 0
q = deque()
def bfs():
global ans
w = copy.deepcopy(arr)
for i in range(N):
for j in range(M):
if w[i][j]==2:
q.append([i,j])
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:
if w[nx][ny]==0:
w[nx][ny] = 2
q.append([nx,ny])
cnt = 0
for i in w:
cnt+=i.count(0)
ans = max(ans,cnt)
def wall(x):
if x==3:
bfs()
return
for i in range(N):
for j in range(M):
if arr[i][j]==0:
arr[i][j]=1
wall(x+1)
arr[i][j]=0
wall(0)
print(ans)
⊙ 결과
⊙ 마무리
NONE
좋아요는 로그인하지 않아도 누를 수 있습니다!
728x90
반응형
'백준 온라인 저지 [BOJ] > PYTHON [파이썬]' 카테고리의 다른 글
[백준(BOJ)] 17129번 : 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유 - PYTHON[파이썬] (0) | 2021.10.03 |
---|---|
[백준(BOJ)] 10026번 : 적록색약 - PYTHON[파이썬] (0) | 2021.10.03 |
[백준(BOJ)] 1766번 : 문제집 - PYTHON[파이썬] (0) | 2021.09.29 |
[백준(BOJ)] 2252번 : 줄 세우기 - PYTHON[파이썬] (0) | 2021.09.27 |
[백준(BOJ)] 1987번 : 알파벳 - PYTHON[파이썬] (0) | 2021.09.27 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 쉽게배우는
- 백준
- 풀이
- 연습문제
- 정렬
- 프로그래머스
- py
- 그리디
- 문자열
- 구현
- 우종정
- 운영체제
- 답
- java
- CPP
- 정리
- 자바
- Web
- JS
- OS
- BFS
- 정답
- 쉽게 배우는 자바 프로그래밍
- Python
- C++
- 자바스크립트
- 파이썬
- 쉽게배우는자바프로그래밍
- 알고리즘
- 해답
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함