2468번: 안전 영역
재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 �
www.acmicpc.net
- 비의 높이가 얼마냐에 따라서 영역들이 다르게 된다.
- 가능한 비의 높이는 0 ~ 최대 100 까지 이기 때문에, 각 높이별로 DFS 를 한번씩 돌려서 영역의 값들을 비교해나간다.
#include <iostream>
#include <vector>
using namespace std;
int n, temp, maxi, answer;
int map[100][100];
bool tmap[100][100];
int dir[4] = {-1, 1, 0, 0};
void dfs(int r, int c)
{
if(0 <= r && r < n && 0 <= c && c < n) // 인덱스 검사
{
if(tmap[r][c]) // 이어지는 영역이라면
{
tmap[r][c] = false; // 방문처리
for(int i = 0 ; i < 4 ; i++) // 4방향으로 이어지는게 더 있는지 확인
{
dfs(r + dir[i], c + dir[3-i]);
}
}
}
}
int main(void)
{
cin >> n;
for(int r = 0 ; r < n ; r++)
for(int c = 0 ; c < n ; c++)
{
cin >> temp;
map[r][c] = temp;
if(temp > maxi) maxi = temp;
}
for(int height = 2 ; height < maxi ; height++) // 가능한 장마의 높이를 전부 탐색
{
for(int r = 0 ; r < n ; r++)
for(int c = 0 ; c < n ; c++)
{
if(map[r][c] <= height) tmap[r][c] = false; // dfs 에 사용할 tmap 을 매번 적절하게 초기화
else tmap[r][c] = true;
}
temp = 0;
for(int r = 0 ; r < n ; r++) // dfs
for(int c = 0 ; c < n ; c++)
{
if(tmap[r][c])
{
dfs(r, c);
temp++;
}
}
if(temp > answer) answer = temp; // 안전 영역 갯수 최댓값 갱신
}
cout << answer << endl;
}
'PS > BOJ' 카테고리의 다른 글
[백준] 1946 : 신입 사원 (0) | 2020.09.17 |
---|---|
[백준] 9934 : 완전 이진 트리 (0) | 2020.09.16 |
[백준] 4963 : 섬의 개수 (0) | 2020.09.14 |
[백준] 19844 : 단어 개수 세기 (0) | 2020.09.13 |
[백준] 2156.cpp : 포도주 시식 (0) | 2020.09.11 |