Baekjoon 2667, 백준 2667 문제의 본인 풀이입니다!
문제는 아래의 링크에서 확인할 수 있습니다.
문제보기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| #include <cstdio> #include <cstring> #include <vector> #include <algorithm>
using namespace std;
int map[27][27]; int visit[27][27]; int N, cnt = 0; vector<int> v;
void dfs(int x, int y){ visit[x][y] = 1; cnt++;
if(visit[x+1][y] != 1 && map[x+1][y] == 1 && x+1 < N) { dfs(x+1, y); }
if(visit[x][y+1] != 1 && map[x][y+1] == 1 && y+1 < N) { dfs(x, y+1); }
if(visit[x-1][y] != 1 && map[x-1][y] == 1 && x-1 >= 0) { dfs(x-1, y); }
if(visit[x][y-1] != 1 && map[x][y-1] == 1 && y-1 >= 0) { dfs(x, y-1); }
}
int main() { scanf("%d", &N);
for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ scanf("%1d", &map[i][j]); } }
memset(visit, 0, sizeof(visit));
for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(map[i][j] == 1 && visit[i][j] != 1) { dfs(i, j); v.push_back(cnt); cnt = 0; } } }
sort(v.begin(), v.end()); printf("%d\n", v.size()); for(auto iter = v.begin(); iter != v.end(); iter++) { printf("%d\n", *iter); } }
|
2차원 배열에서 그래프 탐색을 이용하여 푸는 문제이다.
DFS, BFS 아무거나 사용해도 상관없다.