이제 c++로 개발할 일이 많아질테니, 친숙해지자는 의미에서 c++로 풀어보았다.
#include <iostream>
#include <algorithm>
#define max_num 26
int arr[max_num ][max_num ] = {0,};
int visited[max_num ][max_num ] = {0,};
int chk = 0;
int chk_arr[max_num*max_num] = {0,};
void dfs(int i,int j,int N){
if (arr[i][j + 1] == 1 && visited[i][j + 1] != 1 && j+1 < N) { //right
visited[i][j + 1] = 1;
chk += 1;
dfs(i, j + 1, N);
}
if (arr[i + 1][j] == 1 && visited[i + 1][j] != 1 && i+1 < N) { //down
visited[i + 1][j] = 1;
chk += 1;
dfs(i + 1, j, N);
}
if (arr[i-1][j] == 1 && visited[i-1][j] != 1 && i > 0){ //up
visited[i - 1][j] = 1;
chk += 1;
dfs(i - 1, j, N);
}
if (arr[i][j-1] == 1 && visited[i][j-1] != 1 && j > 0){ //left
visited[i][j-1] = 1;
chk += 1;
dfs(i, j-1,N);
}
}
int main() {
int N = 0;
int sum = 0;
std::cin >> N;
for (int i = 0; i != N; i++){
std::string temp = "";
std::cin >> temp;
for (int j = 0; j < temp.length();j++){
arr[i][j] = temp[j] - '0';
}
}
for (int i = 0; i != N; i++){
for (int j =0; j!= N; j++){
chk = 0;
if (arr[i][j] == 1 && visited[i][j] != 1){
visited[i][j] = 1;
chk += 1;
dfs(i, j, N);
sum += 1;
chk_arr[sum - 1] = chk;
}
}
}
if (sum != 0){
std::cout << sum << std::endl;
std::sort(chk_arr, chk_arr + max_num*max_num);
for (int k = 0; k < max_num*max_num; k++ ){
if (chk_arr[k] != 0){
if (k==max_num*max_num-1)
std::cout << chk_arr[k];
else
std::cout << chk_arr[k] << std::endl;
}
}
}
else
std::cout << sum;
return 0;
}