int N, cnt = 1, ans = 0; int map[101][101]; int dx[] = { -1,1,0,0 }; int dy[] = { 0,0,-1,1 }; bool test[101][101];
int max(int a, int b) { return a > b ? a : b; } void rain(int depth) { for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) if (map[i][j] > depth) test[i][j] = 1; }
void init() { for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) test[i][j] = false;
}
void dfs(int i, int j) { test[i][j] = false; for (int k = 0; k < 4; k++) { int nx = i + dx[k]; int ny = j + dy[k]; if (nx <0 || ny <0 || nx>N - 1 || ny > N - 1)continue; if (test[nx][ny]) dfs(nx, ny); } }
int main() { cin >> N;
for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) cin >> map[i][j]; int final = 0; while (cnt++ < 100) { rain(cnt);
for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) if (test[i][j]) { ans++; dfs(i, j); }
final = max(final, ans); init(); ans = 0; } cout << final; return 0;
khc1297 6년 전
#include <iostream>
using namespace std;
int N, cnt = 1, ans = 0;
int map[101][101];
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
bool test[101][101];
int max(int a, int b) { return a > b ? a : b; }
void rain(int depth)
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (map[i][j] > depth)
test[i][j] = 1;
}
void init()
{
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
test[i][j] = false;
}
void dfs(int i, int j)
{
test[i][j] = false;
for (int k = 0; k < 4; k++)
{
int nx = i + dx[k];
int ny = j + dy[k];
if (nx <0 || ny <0 || nx>N - 1 || ny > N - 1)continue;
if (test[nx][ny])
dfs(nx, ny);
}
}
int main()
{
cin >> N;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
cin >> map[i][j];
int final = 0;
while (cnt++ < 100)
{
rain(cnt);
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
if (test[i][j])
{
ans++;
dfs(i, j);
}
final = max(final, ans);
init();
ans = 0;
}
cout << final;
return 0;
}
잘짠거 같은데 40%쯤에서 틀렸다하는데 뭐가 틀렸는지 모르겠습니다
한수 부탁드립니다.