BOJ 2468 안전영역

2021. 7. 30. 21:21백준 문제풀이

📎Problem Link

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

 

2468번: 안전 영역

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

www.acmicpc.net

 

📋 문제 정리

  • 침수되지 않은 안전한 구간 세기
  • 지역의 높이 정보는 2차원 배열 & 행과 열은 N으로 동일
  • 각 지역의 높이 정보는 
  • 첫째 줄에는 N 입력
  • 둘째줄부터 N개의 줄에는 자연수로 각 지역의 높이 입력 (이 때, 높이는 1이상 100 이하의 정수)

 

📌 예제 1

예제 1을 그림으로 나타내면 위와 같다. 위의 표에서 제일 최대 높이로 가질 수 있는 9까지의 경우를 봤을 때 최대 안전지역 개수는 N=4, 5일 때 5개이다.

 

 

📌 예제 2

예제 2를 그림으로 나타내면 위와 같다. 위의 표에서 제일 최대 높이로 가질 수 있는 9까지의 경우를 봤을 때, 최대 안전 지역 개수는 N=7일 때 6이다.


💻 Code

#include<iostream>
#include<algorithm>
#include<queue>
#define MAX 100
using namespace std;
int mx[4] = { 0, 0, 1, -1 };
int my[4] = { 1, -1, 0, 0 };

class Country {
public:
	int N;
	int map[MAX][MAX];
	int visited[MAX][MAX] = { 0 };
	queue <pair<int, int>> q;

	void DFS(int l, int y, int x) {
		q.push(make_pair(y, x));
		
		while (!q.empty()) {
			int cy = q.front().first;
			int cx = q.front().second;
			q.pop();

			for (int i = 0; i < 4; i++) {
				int ny = cy + my[i];
				int nx = cx + mx[i];

				if (ny < 0 || ny >= N || nx < 0 || nx >= N)
					continue;

				if ((map[ny][nx] > l) && !visited[ny][nx])
				{
					visited[ny][nx] = 1;
					q.push(make_pair(ny, nx));
				}
			}

		}
	}
};

int main() {
	int limit_max = 0;
	int result = 1;
	int temp = 0;
	Country rainy;

	cin >> rainy.N;

	for (int i = 0; i < rainy.N; i++) {
		for (int j = 0; j < rainy.N; j++) {
			cin >> rainy.map[i][j];
			limit_max=std::max(limit_max, rainy.map[i][j]);
		}
	}

	for (int i = 1; i <= limit_max; i++) {
		temp = 0;
		memset(rainy.visited, 0, sizeof(rainy.visited));
		for (int j = 0; j < rainy.N; j++) {
			for (int k = 0; k < rainy.N; k++) {
				if (i < rainy.map[j][k] && !rainy.visited[j][k])
				{
					rainy.visited[j][k] = 1;
					rainy.DFS(i, j, k);
					temp++;
				}
			}
		}
		result = max(temp, result);
	}
	cout << result << endl;
}

 

 

 


'백준 문제풀이' 카테고리의 다른 글

BOJ 1389 케빈 베이컨의 6단계 법칙  (0) 2021.08.06
BOJ 1018 체스판 다시 칠하기  (0) 2021.08.06
BOJ 2583 영역구하기  (0) 2021.07.30
BOJ 11724 연결 요소의 개수  (0) 2021.07.30
BOJ 2667 단지번호붙이기  (0) 2021.07.25