Written on
·
315
0
기준을 배열 내에 있는 가장 높은 높이로 잡았습니다. 강수량이 배열 내부에서 가장 높은 높이보다 같거나 크다면 안전지역이 없는 것이니 0이 나온다고 생각했습니다. 배열 내부 최대값 보다 작은 것 중에 찾으면 되겠다고 생각하고 문제에 접근했습니다. 어느 부분을 잘못생각할 걸까요? ㅠㅠ
#include<bits/stdc++.h>
using namespace std;
int n, m,ret=0, nx, ny, x, y, ma = 0;
int max_len;
int h[104][104];
bool sc[104][104];
set<int> _set;
int dy[4] = {-1,0,1,0};
int dx[4] = {0,1,0,-1};
void dfs(int y, int x, int m){
sc[y][x] = 1;
for (int i =0; i<4; i++){
ny = y + dy[i];
nx = x + dx[i];
// 인덱스로 표현하면 n보다 하나 작아야하니깐 n까지 포함시켜서 커지면 안됨
if(nx < 0 || ny < 0 || nx >= n || ny >= n) continue;
if(h[ny][nx] > m && !sc[ny][nx]){
dfs(ny,nx,m);
}
}
}
int main(){
cin >> n;
for (int i =0; i < n; i++){
for (int j = 0;j < n; j++){
cin >> h[i][j];
if(h[i][j] > max_len){
max_len = h[i][j];
}
}
}
for (int i = 1 ; i < max_len; i++){
m = i;
int ret = 0;
fill(&sc[0][0],&sc[0][0] + 104*104,0);
for (int i =0; i <= n; i++){
for (int j = 0;j < n; j++){
if(h[i][j] > m && !sc[i][j]){
dfs(i,j,m);
ret++;
}
}
}
if(ma <= ret) {
ma = ret;
}
}
cout << ma << "\n";
return 0;
}
Answer 2
0
0
안녕하세요. ㅎㅎ 정Logan님 먼저 나름 잘 짜셨는데요.
반례는 다음과 같아요.
3
1 1 1
1 1 1
1 1 1
뭐가 나와야 할까요? 1이 나와야 합니다. 아무것도 잠기지 않는 경우의 수도 생각해야 되요. (질문자님의 코드는 0이 나옵니다.)
또한 아래 코드 <=가 아니라 < 겠죠?
감사합니다.
for (int i =0; i <= n; i++){