Input 값을 cin으로 받아와서 한줄씩 다 받아오기 때문에 에러 발생
전형적인 BFS 문제로 현재 위치를 기준을 좌,우,상,하를 다 따져보고 조건에 따라 queue에 push
//입력값 잘 구분하기
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int map[25][25];
int N;
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
vector <int> v;
int cnt =1;
void BFS(int x ,int y)
{
cnt++;
queue <pair<int,int>> q;
q.push(make_pair(x,y));
map[x][y]=cnt;
int num=1;
while(!q.empty()){
int x1 = q.front().first;
int y1 = q.front().second;
q.pop();
for(int i=0;i<4;i++){
int nx = x1 + dx[i];
int ny = y1 + dy[i];
if(nx < 0 || nx >= N || ny < 0 || ny >= N)
continue;
if(map[nx][ny] == 1){
q.push(make_pair(nx,ny));
map[nx][ny] = cnt;
num++;
}
}
}
v.insert(v.begin()+cnt-2,num);
}
int main(void)
{
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)
BFS(i,j);
}
}
sort(v.begin(), v.end());
cout << v.size() << endl;
for(int i=0;i<v.size();i++)
cout << v[i] << endl;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
15652-N과M(4) (0) | 2020.05.11 |
---|---|
15651 - N과M(3) (0) | 2020.05.11 |
15650 - N과M(2) (0) | 2020.05.11 |
15649 - N과 M(1) (0) | 2020.05.11 |
14891(톱니바퀴) (0) | 2020.04.30 |