어디가 틀렸는지 못 찾겠음


+) 문제 해결

num의 크기가 N*N/2여야함


//BJ2667
#include <iostream>
#include <algorithm>
#include <queue>

using namespace std;    //꼭 써줘...

void BFS(int x, int y, int cnt);

int dx[] = {-1, 0, 1, 0};  //위, 오른쪽, 아래, 왼쪽 방향
int dy[] = {0, 1, 0, -1};
int map[26][26] = {0,};
int check[26][26] = {0,};
int num[313] = {0,};    //25*25/2

int N = 0;   //5<=N<=25

int main(){
    scanf("%d",&N);
    for(int i = 0; i<N; i++){
        for(int j = 0; j<N; j++){
            scanf("%1d", &map[i][j]);}      //입력 한글자씩
    }
    int cnt = 0;
 
    for(int i=0; i<N; i++){
        for(int j = 0;j<N; j++){
            if(map[i][j]==1&&check[i][j]==0){
                BFS(i, j, ++cnt);
            }
            else if(check[i][j]==0){
                check[i][j] = -1;
            }
        }
    }//for end


    printf("%d\n", cnt);
    
    sort(num,num+cnt); //크기 순서대로 sort
    for(int i=0; i<cnt;i++){
        printf("%d\n",num[i]);
    }
}

void BFS(int x, int y, int cnt){
    
    queue<pair<int,int>> q;  //q호출
    q.push(make_pair(x,y));
    check[x][y] = cnt;
    num[cnt-1]++;
    while(!q.empty()){
        x = q.front().first;    //x,y값 초기화
        y = q.front().second;
        q.pop();
        
        for(int k=0; k<4; k++){
            int nx = x + dx[k];
            int ny = y + dy[k];
            
            if(0<=nx && nx<N && 0<=ny && ny<N){//nx,ny가 범위안에 드는가
                if(map[nx][ny]==1&&check[nx][ny]==0){
                    q.push(make_pair(nx,ny));//nx, ny push
                    check[nx][ny] = cnt;
                    num[cnt-1]++;
                }
                else if(check[nx][ny]==0)
                {
                    check[nx][ny] = -1; //탐색완료
                }
            }
        }//위아래방향 탐구 끝
    }
}

왈독님의 창작활동을 응원하고 싶으세요?