반응형
DFS로 푼 정답 입니다
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 | #include <iostream> #include <stdlib.h> using namespace std; int c[1000], a[26][26], d[26][26], N, cnt, dx[4] = { 0,0,1,-1 }, dy[4] = { 1,-1,0,0 }; int compare(const void *a, const void *b) { return *(int*)a - *(int*)b; } void DFS(int i,int j, int cnt) { d[i][j] = 1; d[i][j] = cnt; { for(int k = 0; k< 4; k++)//4방향에서 살펴봐야 한다. { int nx = i + dx[k]; int ny = j + dy[k]; if (0 <= nx && nx < N && 0 <= ny && ny < N) { if (d[nx][ny] == 0 && a[nx][ny] == 1) { DFS(nx,ny,cnt); d[nx][ny] = cnt; } } } } } int main() { cin >> N; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) { scanf("%1d", &a[i][j]); } for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (!d[i][j] && a[i][j]) { DFS(i, j, ++cnt); } } } for(int i = 0; i< N; i++) for (int j = 0; j < N; j++) { if (d[i][j]) { c[d[i][j]]++; } } qsort(c, 1000, sizeof(int), compare); cout << cnt << '\n'; for (int i = 0; i < 1000; i++) { if (c[i] !=0) { cout << c[i] << '\n'; } } } | cs |
'Algorithm' 카테고리의 다른 글
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2693번:N번째 큰 수 답 (0) | 2017.02.08 |
---|---|
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 1932번:숫자삼각형 답 (0) | 2017.02.08 |
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 2667번:단지번호붙이기(BFS) 답 (0) | 2017.02.08 |
(C++) - 백준(BOJ) 10179번 : 쿠폰 (0) | 2017.02.07 |
C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 13701번:중복 제거 답 (0) | 2017.02.07 |