문제
링크
풀이
#include <stdio.h>
int n, cnt = 0;
int board[25][25];
int size[25*25];
int group(int x, int y, int id) {
int count = 1;
board[x][y] = id;
if (x > 0 && board[x-1][y] == 1) count += group(x-1, y, id);
if (x < n-1 && board[x+1][y] == 1) count += group(x+1, y, id);
if (y > 0 && board[x][y-1] == 1) count += group(x, y-1, id);
if (y < n-1 && board[x][y+1] == 1) count += group(x, y+1, id);
return count;
}
void swap(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
void bubbleSort(int arr[], int n) {
for (int i=0; i<n; i++) {
for (int j=0; j<n-i-1; j++) {
if (arr[j] > arr[j+1]) {
swap(&arr[j], &arr[j+1]);
}
}
}
}
int main(void) {
scanf("%d", &n);
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
scanf("%1d", &board[i][j]);
}
}
for (int i=0; i<n; i++) {
for (int j=0; j<n; j++) {
if (board[i][j] == 1) {
size[cnt] = group(i, j, cnt+2);
cnt++;
}
}
}
bubbleSort(size, cnt);
printf("%d\n", cnt);
for (int i=0; i<cnt; i++) {
printf("%d\n", size[i]);
}
return 0;
}