[C언어] 2667. 단지 번호붙이기

SW 업무 관련/백준

[C언어] 2667. 단지 번호붙이기

WillBe_ 2018. 8. 12. 21:18

단지 번호붙이기!!!!


유기농 배추랑 매우매우 비슷한 문제!!!


유기농은 그냥 단지 카운트만 하면 되었는데, 이거는 추가로 갯수까지 새어주어야 한다!!!


계속 틀리길래...뭐가 문제지??했는데......최대 단지의 개수를 잘 못 생각해서...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