단지번호붙이기

BiBi·2021년 2월 7일
0

코딩테스트연습

목록 보기
63/66

#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
#include <cmath>
#include <algorithm>

int arr[25][25];
int visited[25][25];
bool Done[25][25];
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };

int t, n;
std::vector<int> vec;
int cnt;

void bfs(int r, int c) {
	visited[r][c] = 1;
	cnt++;
	for (int i = 0;i < 4;i++) {
		if (r + dx[i] >= 0 && r + dx[i] < n && c + dy[i] >= 0 && c + dy[i] < n) {
			if (arr[r + dx[i]][c + dy[i]] == 1 && visited[r + dx[i]][c + dy[i]] == 0) {
				bfs(r + dx[i], c + dy[i]);
			}
		}
	}

}



int main() {
	scanf("%d", &n);
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < n;j++) {
			scanf("%1d", &arr[i][j]);
		}
	}
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < n;j++) {
			if (arr[i][j] == 1 && visited[i][j] == 0) {
				cnt = 0;
				bfs(i, j);
				vec.push_back(cnt);
			}
		}
	}
	std::sort(vec.begin(), vec.end());
	printf("%d\n", vec.size());
	for (int i = 0;i < vec.size();i++) {
		printf("%d\n", vec[i]);
	}
	bfs(0, 0);
	
}
profile
Server Network Engineer

0개의 댓글