// 4421
/*
#include <stdio.h>
int n, num=0;
int a[26][26]= {};
void dfs(int x, int y)
{
if(x>=0&&x<n&&y>=0&&y<n&&a[x][y]==1)
{
a[x][y]=-1;
num++;
dfs(x+1, y);
dfs(x-1, y);
dfs(x, y+1);
dfs(x, y-1);
}
}
int main()
{
int i, j, x, y, temp,cnt=0, d[50]={};
scanf("%d", &n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%1d", &a[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(a[i][j]==1)
{
num=0;
cnt++;
dfs(i,j);
d[cnt]=num;
}
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("%2d ", a[i][j]);
}
printf("\n");
}
printf("%d\n", cnt);
for(i=1; i<=cnt; i++)
{
for(j=1; j<=cnt-i; j++)
{
if(d[j]>d[j+1])
{
temp=d[j];
d[j]=d[j+1];
d[j+1]=temp;
}
}
}
for(i=1; i<=cnt; i++)
{
printf("%d\n", d[i]);
}
return 0;
}
*/
25*25니까 cnt가 약 320까지 가능하기 때문에 d배열의 크기를 d[50]에서 d[320]으로 바꿔주면 정확한 풀이가 뜹니다!