https://www.acmicpc.net/problem/2667
#include <iostream>
#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 dfs(int y, int x)
{
chk[y][x] = true;
cnt++;
for (int i = 0; i < 4; i++)
{
int ny = y + dy[i];
int nx = x + dx[i];
if (chk[ny][nx] == false && map[ny][nx] == 1)
{
dfs(ny, nx);
}
}
}
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)
{
dfs(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' 카테고리의 다른 글
백준 14502번 : 연구소 (c++) (0) | 2020.04.13 |
---|---|
이진 탐색 알고리즘 - binarySearch (c++) (0) | 2020.04.04 |
백준 2667번 : 단지번호붙이기 - bfs 기본문제 (c++) (0) | 2020.04.01 |
2019 카카오 코딩테스트 1번 : 오픈채팅방 (c++) (0) | 2020.03.20 |
백준 1010번 : 다리 놓기 (c++) (0) | 2020.03.20 |