[2468] 안전 영역, c++

2021. 2. 7. 00:08·DEV/PS

[2468] 안전 영역

 

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

 

2468번: 안전 영역

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

www.acmicpc.net

전형적인 그래프 문제

그냥 기준 높이를 다 돌려봐서 최대 출력하면 된다. 시간초과 날까 약간 고민했는데 테스트 수가 적어서 그런지 안남.

#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int arr[101][101];
int cnt[101]={0};
int n;
bool check[101][101]={false};
void dfs(int x, int y, int rain){
	check[x][y] = true;
	if(x+1<n && x+1>=0 && check[x+1][y] == false && arr[x+1][y] > rain){
		dfs(x+1,y,rain);
	}
	if(x-1>=0 && x-1<n && check[x-1][y] == false && arr[x-1][y] > rain){
		dfs(x-1,y,rain);
	}
	if(y+1<n && y+1>=0 && check[x][y+1] == false && arr[x][y+1] > rain){
		dfs(x,y+1,rain);
	}
	if(y-1 >= 0 && y-1 < n && check[x][y-1] == false && arr[x][y-1] > rain){
		dfs(x,y-1,rain);
	}
}
int main(){
	cin >> n;
	int s=200,m=0;
	for(int i=0; i<n; i++){
		for(int j=0; j<n; j++){
			scanf("%d", &arr[i][j]);
			s=min(arr[i][j], s);
			m=max(arr[i][j], m);
		}
	}
	int max2=0;
	for(int k=s; k<=m; k++){
		for(int i=0; i<n; i++){
			for(int j=0; j<n; j++){
				if(check[i][j] == false && arr[i][j]>k){
					dfs(i,j,k);
					cnt[k]++;
				}
			}
		}
		for(int i=0; i<n; i++){
			for(int j=0; j<n; j++){
				check[i][j] = false;
			}
		}
		max2 = max(cnt[k],max2);
	}
	if(max2 == 0)	printf("1");
	else{
		printf("%d",max2);
	}
}

풀이) 처음에 입력 받을 때 max 높이와 min 높이를 찾아 놓는다.

그 후 min~max 까지 dfs 를 통해 기준 높이보다 높은 곳을 방문한다. 방문하다 끊기는 순간->안전영역-> cnt 개수 증가

이 때, 아무 지역도 물에 잠기지 않는다 이 말이 중요한데 즉, 비가 안 올 수도 있는 경우 이 경우 모든 높이가 동일하면 안전영역은 1개밖에 나오지 않음. 그러므로 max2 값이 0인경우를 1로 바꿔 출력해야한다.

이 문제는 테스트 케이스, 예외 케이스 모두 정답이 출력 됐는데 계속 틀렸습니다가 떴다 알고보니 memset을 잘못 써서..

저작자표시 (새창열림)

'DEV > PS' 카테고리의 다른 글

[11403] 경로 찾기, c++  (0) 2021.02.07
[1325] 효율적인 해킹, c++  (0) 2021.02.07
[9372] 상근이의 여행​, c++  (0) 2021.02.07
[1012] 유기농 배추, c++  (0) 2021.02.07
[4963] 섬의 개수, c++  (0) 2021.02.07
'DEV/PS' 카테고리의 다른 글
  • [11403] 경로 찾기, c++
  • [1325] 효율적인 해킹, c++
  • [9372] 상근이의 여행​, c++
  • [1012] 유기농 배추, c++
jobchae
jobchae
말하는 감자지만, 코드를 끄적이는 Node.js 백엔드 개발자입니다.
  • jobchae
    JOBCHAE
    jobchae
  • 전체
    오늘
    어제
    • 🚀 JOBCHAE (182)
      • DEV (151)
        • PS (108)
        • Node.js (12)
        • React (3)
        • docker (1)
        • 잡다한 개발 일지 (21)
        • injection (1)
        • JS, TS (3)
        • DB (2)
      • 축구 (0)
      • 일상 (19)
      • 영화 (3)
      • 음악 (8)
  • 블로그 메뉴

    • 💻 Github
    • 🙋🏻 Linkedin
    • 📖 방명록
  • 링크

    • PS Github
  • 공지사항

  • 인기 글

  • 태그

    일상
    boj
    PS
    DP
    Express
    위상정렬
    node.js
    회고
    db
    우선순위큐
    mongoDB
    렛츠락페스티벌
    솝트
    typescript
    슬랙
    개발
    nodejs
    GitHub
    DFS
    알고리즘
    리액트
    JavaScript
    슬랙봇
    react
    이분탐색
    백준
    Nest.js
    SOPT
    BFS
    앱잼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
jobchae
[2468] 안전 영역, c++
상단으로

티스토리툴바