문제링크 : https://www.acmicpc.net/problem/2667
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int N, via[101][101];
//dfs 후에 connected component size return
int dfs(int y, int x)
{
if(y<0 || y>=N || x<0 || x>=N || via[y][x]==0) return 0;
else
{
via[y][x] = 0;
return 1 + dfs(y-1,x) + dfs(y+1,x) + dfs(y, x-1) + dfs(y, x+1);
}
}
int main(){
vector<int> ans;
//input
cin>>N;
for(int i=0; i<N;i ++)
{
for(int j=0; j<N; j++)
{
cin>>via[i][j];
}
}
//calc
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if(via[i][j] == 1){
ans.push_back(dfs(i,j));
}
}
}
//output
sort(ans.begin(), ans.end());
cout<<ans.size();
for(int i=0; i<ans.size(); i++)
{
cout<<ans[i];
}
}
그냥 connected component 의 개수를 구하는 문제다.
dfs를 사용해 풀었음.
'알고리즘 > BOJ문제풀이' 카테고리의 다른 글
185번째 문제 - 9417 최대 gcd (0) | 2016.11.24 |
---|---|
184번째 문제 - 1371 가장 많은 글자 (0) | 2016.11.24 |
미니 대회 (1) | 2016.11.23 |
182번째 문제 - 11403 경로찾기 (0) | 2016.11.23 |
181번째 문제 - 1932 숫자삼각형 (0) | 2016.11.23 |