[BaekJoon] 백준 2468번 안전영역
문제: https://www.acmicpc.net/problem/2468
내코드
- bfs, dfs 로 풀수 있는 문젠데 bfs로 문제를 많이 풀어서 이번에는 dfs로 풀어보았다.
- DFS : Stack을 이용, 깊이 우선
function dfs(Node root){
root.visited = true;
for each( root 노드에 인접한 모든 노드들에 대해){
if(n.visited == false) dfs(n);
}
- 물에 잠기는 높이가 주어지지 않았기 때문에 높이 = 0 ~ 최대 높이 - 1 까지 전부 돌려봐야 하지 않을까 생각.
- 주어진 입력을 받아서 높이가 가장 높은 영역의 높이를 구해줬다.
- 새로운 array에 물에 잠긴 부분은 1, 물에 잠기지 않은 부분은 0으로 초기화 시켜주었다.
- 바로 윗줄을 물에 잠기는 부분의 높이가 1 이하인 경우부터 물이 잠기는 부분의 높이가 (최대 높이 - 1) 이하인 경우까지 총 최대높이 -2번 반복해주었다.
- dfs는 일반적인 dfs풀이
-주의할점: 아무지역도 물에 잠기지 않는 경우가 존재한다. 따라서 최댓값을 처음에 초기화 해줄때 1로 초기화를 해줘야한다.
#include <iostream>
#include <string>
using namespace std;
int n;
int num[100] = {0, };
int arr[100][100];
int dfsArr[100][100];
int visited[100][100] = { false, };
int dx[] = { 0, 1, 0, -1 };
int dy[] = { -1, 0, 1, 0 };
void dfs(int a, int b) {
visited[a][b] = true;
for (int i = 0; i < 4; i++) {
int x = a + dx[i];
int y = b + dy[i];
if (x < 0 || y < 0 || x >= n || y >= n) continue;
if (visited[x][y] == false && dfsArr[x][y] == 0) dfs(x, y);
}
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
int max = -1;
//initialize and find the highest area
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
max = max < arr[i][j] ? arr[i][j] : max;
}
}
for (int i = 1; i <= max; i++) {
for (int p = 0; p < n; p++) {
for (int q = 0; q < n; q++) {
if (arr[p][q] <= i) dfsArr[p][q] = 1; //물에 잠긴부분
else dfsArr[p][q] = 0; //물에 잠기지 않은 부분
visited[p][q] = false;
}
}
for (int p = 0; p < n; p++) {
for (int q = 0; q < n; q++) {
if (visited[p][q] || dfsArr[p][q] == 1) continue;
dfs(p, q);
num[i]++;
}
}
}
int maxArea = 1;
for (int i = 1; i < max; i++) {
maxArea = maxArea < num[i] ? num[i] : maxArea;
}
cout << maxArea;
return 0;
}
참고
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 2752번 세수정렬 (0) | 2020.03.22 |
---|---|
[BaekJoon] 백준 2573번 빙산 (0) | 2020.03.22 |
[BaekJoon] 백준 2206번 벽 부수고 이동하기 (0) | 2020.03.19 |
[BaekJoon] 백준 7562번 나이트의 이동 (0) | 2020.03.18 |
[BaekJoon] 백준 10026번 적록색약 - C++, Python (0) | 2020.03.17 |