본문 바로가기
알고리즘/python

2468번 안전 영역(python3)

by 펀구구 2022. 2. 5.

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

 

2468번: 안전 영역

재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는

www.acmicpc.net

bfs를 적용하며 된다.

건물들 중 가장 높은 건물의 높이(max)를 구하고 1에서부터 max까지 반복문을 실행해주면서 bfs를 적용하면 된다. 

import sys
from collections import deque

N = int(input())
data = []
for i in range(N):
    a = sys.stdin.readline()
    data.append(list(map(int, a.split())))

max_height = 0
for i in range(N):
    for j in range(N):
        if data[i][j] > max_height:
            max_height = data[i][j]

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


def bfs(j, k):
    queue = deque()
    visited[j][k] = 1
    queue.append([j, k])
    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 < N:
                if visited[nx][ny] == 0:
                    visited[nx][ny] = 1
                    queue.append([nx, ny])


count = 0
for i in range(max_height):
    temp = 0
    visited = [[0] * N for _ in range(N)]
    for j in range(N):
        for k in range(N):
            if data[j][k] <= i:
                visited[j][k] = -1
    for j in range(N):
        for k in range(N):
            if visited[j][k] == 0:
                bfs(j, k)
                temp += 1

    if temp > count:
        count = temp
print(count)

'알고리즘 > python' 카테고리의 다른 글

2573번 빙산(python3)  (0) 2022.02.06
16236번 아기상어(python3)  (0) 2022.02.06
10026번 적록색약(python3)  (0) 2022.02.05
1904번 01타일(python3)  (0) 2022.02.02
1309번 동물원(python3)  (0) 2022.02.02