2667 단지 번호 붙이기
DFS나 BFS를 통한 브루트포스..
DFS로 풀기
#include <iostream>
#include <vector>
#include <stdio.h>
#include <algorithm>
using namespace std;
int num;
int apart[25][25];
int visited[25][25];
int direction[4][2] = {
{0, -1}, {1,0},
{0, 1}, {-1, 0}
};
void countDanji(int r, int c, bool &isFirst, vector<int>& count) {
if(apart[r][c] == 0 || r >= num || c>= num || r<0 || c<0|| visited[r][c]) {
return;
}
visited[r][c] = true;
if(isFirst) {
isFirst = false;
count.push_back(1);
} else {
int index = (int) count.size() - 1;
count[index] += 1;
}
for(int i= 0; i<4; i++) {
int nextRow = r + direction[i][0];
int nextCol = c + direction[i][1];
countDanji(nextRow, nextCol, isFirst, count);
}
}
int main(int argc, const char * argv[]) {
cin>>num;
vector <int> count;
cin.ignore();
for(int i = 0; i<num; i++) {
fill_n(visited[i], num, false);
}
for(int i = 0; i<num; i++) {
for(int j = 0; j<num; j++) {
int temp;
scanf("%1d", &temp);
apart[i][j] = temp;
}
}
for(int i = 0; i<num; i++) {
for(int j = 0; j<num; j++) {
bool isFirst = true;
countDanji(i, j, isFirst, count);
}
}
int size = (int) count.size();
cout<<size<<endl;
sort(count.begin(), count.end());
for(int i = 0; i<size; i++) {
cout<<count[i]<<endl;
}
return 0;
}BFS로 풀기
Last updated
Was this helpful?