개발자 톡
c언어 코드 공유
- 등록일
- 2024-03-23 08:18:13
- 조회수
- 332
- 작성자
- yeinseo1142
#include <stdio.h>
void swap(int* pa,int* pb){
int temp=*pa;
*pa=*pb;
*pb=temp;
}
int squar[25][25]={0};
int check[25][25]={0};
int cnt=0;
int N;
int ans[25*25];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
void dfs(int x,int y){
check[x][y]=1;
cnt++;
for (int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx<0||yy<0||xx>=N||yy>=N||squar[xx][yy]==0) continue;
if(check[xx][yy]==0) {
check[xx][yy]=1;
dfs(xx,yy);
}
}
}
int main(void)
{
scanf("%d",&N);
for(int i=0;i<N;i++){
for (int j=0;j<N;j++){////
scanf("%1d",&squar[i][j]);}//한자리 숫자만 입력받는다 1안쓰면 입력 제대로 안됨
}
int anssize=0;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(check[i][j]!=0||squar[i][j]==0)
continue;
cnt=0;
dfs(i,j);
ans[anssize++] = cnt;
}
}
for (int i = 0; i < anssize - 1; i++)
{
for (int j = 0; j < anssize - i - 1; j++)
{
if (ans[j] > ans[j + 1])
{
swap(&ans[j],&ans[j+1]);
}
}
}
printf("%d\n",anssize);
for(int i=0;i<anssize;i++){
printf("%d\n",ans[i]);}
return 0;
}