단지 번호붙이기!!!!
유기농 배추랑 매우매우 비슷한 문제!!!
유기농은 그냥 단지 카운트만 하면 되었는데, 이거는 추가로 갯수까지 새어주어야 한다!!!
계속 틀리길래...뭐가 문제지??했는데......최대 단지의 개수를 잘 못 생각해서...count[30]까지만 했던게 엄청난 시간을 버리게 하였다ㅜ,ㅠ
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #include <stdio.h> #include <string.h> #include <stdlib.h> // qsort 함수가 선언된 헤더 파일 typedef struct { int x; int y; }Point; int M, a, b, Res; int Village[30][30] = { 0, }; int count[300]; Point Q[30 * 30] = { {0 ,0 }, }; int BFS(int y, int x) { int dx[] = { 0,0,1,-1 }; int dy[] = { 1,-1,0,0 }; int Q_Front = -1, Q_Back = -1; int count = 1; Q[++Q_Back].y = y; Q[Q_Back].x = x; Village[y][x] = Res; while (Q_Front != Q_Back) { int xx = Q[++Q_Front].x; int yy = Q[Q_Front].y; for (int i = 0; i < 4; i++) { int xxx = xx + dx[i]; int yyy = yy + dy[i]; if (xxx < 0 || yyy < 0 || xxx >= M || yyy >= M) continue; if (Village[yyy][xxx] == -1) { Q[++Q_Back].x = xxx; Q[Q_Back].y = yyy; Village[yyy][xxx] = Res; count++; } } } return count; } int compare(void *first, void *second) { if (*(int*)first > *(int*)second) return 1; else if (*(int*)first < *(int*)second) return -1; else return 0; } int main() { scanf("%d", &M); for (a = 0; a < M; a++) { for (b = 0; b < M; b++) { scanf("%1d",&Village[a][b]); if (Village[a][b] == 1) Village[a][b] = -1; } } for (a = 0; a < M; a++) { for (b = 0; b < M; b++) { if (Village[a][b] == -1) { Res++; count[Res - 1] = BFS(a, b); } } } printf("%d\n", Res); qsort(count, Res, sizeof(int), compare); for (int i = 0; i < Res; i++) { printf("%d\n", count[i]); } return 0; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[C언어] 7562. 나이트의 이동 (0) | 2018.08.14 |
---|---|
[C언어] 2206. 벽 부수고 이동하기 (0) | 2018.08.12 |
[C언어] 1012. 유기농배추 (0) | 2018.08.12 |
[BAEKJOON] 2606_바이러스 (0) | 2018.06.06 |
[BEAKJOON] 풀었던 문제들 복습 - 1편(1000번,1001번,1003번,1008번,1057번) (0) | 2017.09.17 |