코딩테스트/Python
[Python] 백준 #2468 - 안전 영역
yo~og
2022. 5. 15. 15:37
문제
https://www.acmicpc.net/problem/2468
2468번: 안전 영역
재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는
www.acmicpc.net
풀이
import sys
from collections import deque
n = int(input())
maxinum = 0 # 가장 높은 지역 높이
arr = []
for _ in range(n):
tmp = list(map(int,sys.stdin.readline().strip().split()))
arr.append(tmp)
maxinum = max(maxinum,max(tmp))
dx = [0,1,0,-1]
dy = [1,0,-1,0]
# 안전한 지역 구하기
def bfs(i,j,area,visited):
queue = deque([])
queue.append([i,j])
visited[i][j] = True
while queue:
a,b = queue.popleft()
for i in range(4):
x = dx[i] + a
y = dy[i] + b
if 0<=x<n and 0<=y<n and visited[x][y] == False and area[x][y] != 0:
visited[x][y] = True
queue.append([x,y])
# 침수
def water(arr,l):
tmp = [[1]*n for i in range(n)]
for i in range(n):
for j in range(n):
if arr[i][j] <=l:
tmp[i][j] = 0
return tmp
# 안전 영역 최댓값 구하기
sol=0
for k in range(maxinum):
area = water(arr,k)
visited = [[False]*n for _ in range(n)]
cnt=0
for i in range(n):
for j in range(n):
if area[i][j] !=0 and visited[i][j] == False:
bfs(i,j,area,visited)
cnt+=1
sol = max(sol,cnt)
print(sol)
bfs를 사용하여 구해주었다.
가장 높은 지역 높이를 구하고 1부터 가장 높은 지역 높이까지 침수시켜주면서 안전지대의 최댓값을 구해주었다.