반응형
출처
한국정보올림피아드 KOI 2010 초등부 2번
문제 번호
백준 : 4697 안전 영역
코드업 : 2468번 안전 영역
알고리즘
DFS, Flood Fill
풀이
수면의 높이를 0부터 100까지 올려가면서 구역의 개수를 세어준다.(cnt
) 각 수면의 높이마다 ans
를 최대 값으로 갱신해준다. 매 높이 마다 구역을 새로 세어야 하기 때문에 check
배열을 매번 초기화 해주어야 한다.
#include<iostream>
using namespace std;
int in[100][100];
int check[100][100];
int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
int n;
void fill(int a, int b){
check[a][b]=1;
for(int i=0;i<4;i++){
int na=a+dir[i][0], nb=b+dir[i][1];
if(!in[na][nb]||check[na][nb]||na>=n||nb>=n||nb<0||na<0)
continue;
fill(na,nb);
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>in[i][j];
}
}
int ans=0;
for(int h=0; h<=100; h++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(in[i][j]<=h)
in[i][j]=0;
check[i][j]=0;
}
}
int cnt=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(check[i][j]||!in[i][j])
continue;
fill(i,j);
cnt++;
}
}
if(cnt==0)
break;
ans=max(cnt,ans);
}
cout<<ans;
}
반응형
'Problem Solve > DFS & BFS' 카테고리의 다른 글
[백준] 7576번 토마토 (c) (0) | 2020.03.17 |
---|---|
[백준] 7596번 토마토 (C) (0) | 2020.03.16 |
[백준] 2615번 오목 (C) (0) | 2020.03.14 |
[백준] 2583번 영역 구하기 (C) (0) | 2020.03.14 |
[코드업] 3500 : 지뢰 찾기 2 (C) (0) | 2020.03.13 |