Algorithm/graph
[백준] 알고리즘 2667번 - 단지번호붙이기 문제
낭강
2021. 1. 26. 01:46
#include <bits/stdc++.h>
using namespace std;
char check[26][26];
int n;
int cnt = 0;
bool dfs(int x,int y) {
if (x < 0 || x > n || y < 0 || y > n)
return 0;
if (check[x][y]-'0' == 1) {
check[x][y] = 2;
cnt += 1;
dfs(x - 1, y);
dfs(x + 1, y);
dfs(x, y - 1);
dfs(x, y + 1);
return true;
}
return false;
}
int main(){
int ans = 0;
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> check[i][j];
}
}
vector<int> v1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (dfs(i, j)) {
v1.push_back(cnt);
cnt = 0;
}
}
}
sort(v1.begin(), v1.end());
cout << v1.size()<<"\n";
for (int i = 0; i < v1.size(); i++) {
cout << v1[i]<<"\n";
}
}
dfs를 이용하여 한 단지의 블록수를 출력 해주는 문제이다.
이런 문제가 나오면 상 하 좌 우 이동한다하면 저렇게 좌표를 검색하여 dfs를 사용하여 문제를 해결 할 수 있다.