https://www.acmicpc.net/problem/2667
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
int N;
int map[30][30];
bool chk[30][30];
int cnt=0;
vector <int> solution;
vector <int> dy={-1,0,1,0};
vector <int> dx={0,1,0,-1};
void bfs(int y, int x){
queue <pair<int, int>> q;
q.push(make_pair(y,x));
chk[y][x]=true;
while(!q.empty()){
pair<int, int> p;
p = q.front();
q.pop();
cnt++;
for(int i=0;i<4;i++){
int ny = p.first+dy[i];
int nx = p.second+dx[i];
if(map[ny][nx]==1&&chk[ny][nx]==false){
q.push(make_pair(ny,nx));
chk[ny][nx]=true;
}
}
}
}
int main(){
freopen("input.txt","r",stdin);
cin>>N;
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
scanf("%1d", &map[i][j]);
}
}
for(int i=1;i<=N;i++){
for(int j=1;j<=N;j++){
cnt=0;
if(map[i][j]==1 && chk[i][j]==false){
bfs(i, j);
solution.push_back(cnt);
}
}
}
sort(solution.begin(),solution.end());
cout<<solution.size()<<"\n";
for(int i=0;i<solution.size();i++){
cout << solution[i] <<"\n";
}
return 0;
}
'개발자 > algorithm' 카테고리의 다른 글
이진 탐색 알고리즘 - binarySearch (c++) (0) | 2020.04.04 |
---|---|
백준 2667번 : 단지번호붙이기 - dfs 기본문제 (c++) (0) | 2020.04.01 |
2019 카카오 코딩테스트 1번 : 오픈채팅방 (c++) (0) | 2020.03.20 |
백준 1010번 : 다리 놓기 (c++) (0) | 2020.03.20 |
2018 카카오 코딩테스트 1번 : 비밀지도 (c++) (0) | 2020.03.18 |