백준 2667번

게으른 개미개발자·2023년 1월 23일
0

algorithm

목록 보기
2/7

이제 c++로 개발할 일이 많아질테니, 친숙해지자는 의미에서 c++로 풀어보았다.

#include <iostream>
#include <algorithm>

#define max_num 26

int arr[max_num ][max_num ] = {0,};
int visited[max_num ][max_num ] = {0,};
int chk = 0;
int chk_arr[max_num*max_num] = {0,};

void dfs(int i,int j,int N){
    if (arr[i][j + 1] == 1 && visited[i][j + 1] != 1 && j+1 < N) { //right
        visited[i][j + 1] = 1;
        chk += 1;
        dfs(i, j + 1, N);
    }
    if (arr[i + 1][j] == 1 && visited[i + 1][j] != 1 && i+1 < N) { //down
        visited[i + 1][j] = 1;
        chk += 1;
        dfs(i + 1, j, N);
    }

    if (arr[i-1][j] == 1 && visited[i-1][j] != 1 && i > 0){ //up
        visited[i - 1][j] = 1;
        chk += 1;
        dfs(i - 1, j, N);
    }
    if (arr[i][j-1] == 1 && visited[i][j-1] != 1 && j > 0){ //left
        visited[i][j-1] = 1;
        chk += 1;
        dfs(i, j-1,N);
    }


}


int main() {
    int N = 0;
    int sum = 0;
    std::cin >> N;

    for (int i = 0; i != N; i++){
        std::string temp = "";
        std::cin >> temp;
        for (int j = 0; j < temp.length();j++){
            arr[i][j] = temp[j] - '0';
        }
    }

    for (int i = 0; i != N; i++){
        for (int j =0; j!= N; j++){
            chk = 0;
            if (arr[i][j] == 1 && visited[i][j] != 1){
                visited[i][j] = 1;
                chk += 1;
                dfs(i, j, N);
                sum += 1;
                chk_arr[sum - 1] = chk;
            }
        }
    }

    if (sum != 0){
        std::cout << sum << std::endl;
        std::sort(chk_arr, chk_arr + max_num*max_num);
        for (int k = 0; k < max_num*max_num; k++ ){
            if (chk_arr[k] != 0){
                if (k==max_num*max_num-1)
                    std::cout << chk_arr[k];
                else
                    std::cout << chk_arr[k] << std::endl;
            }

        }
    }
    else
        std::cout << sum;


    return 0;
}
profile
특 : 미친듯한 게으름과 부지런한 생각이 공존하는 사람

0개의 댓글