2667번

seuls2·2023년 4월 26일

BOJ

목록 보기
29/55

2667

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int n;
int map[25][25];
bool visit[25][25] = {false,};
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int sum = 1;

void dfs(int x, int y, int cnt) {
	for(int i=0; i<4; i++) {
		int tmpx = x + dx[i];
		int tmpy = y + dy[i];
		
		if(tmpx<0 || tmpx>=n || tmpy<0 || tmpy>=n) continue;
		if(map[tmpx][tmpy]==1 && !visit[tmpx][tmpy]) {
			visit[tmpx][tmpy] = true;
			sum++;
			dfs(tmpx, tmpy, cnt+1);
		}
	}
}

int main() {
	vector<int> result;
	cin >> n;
	for(int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			scanf("%1d", &map[i][j]);
		}
	}
	
	for(int i=0; i<n; i++) {
		for(int j=0; j<n; j++) {
			if(map[i][j]==1 && !visit[i][j]) {
				sum = 1;
				visit[i][j] = true;
				dfs(i,j,1);
				result.push_back(sum);
			}
		}
	}
	
	sort(result.begin(), result.end());
	cout<<result.size()<<endl;
	for(int i=0; i<result.size(); i++) {
		cout<<result[i]<<endl;
	}
}
profile
공부 기록용 ( ᵕ·̮ᵕ )♩

0개의 댓글