๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ - C++

.23 2021. 12. 24. 13:11
๋ฌธ์ œ

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋–ค ์ง‘์ด ์ขŒ์šฐ, ํ˜น์€ ์•„๋ž˜์œ„๋กœ ๋‹ค๋ฅธ ์ง‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ๋Œ€๊ฐ์„ ์ƒ์— ์ง‘์ด ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—ฐ๊ฒฐ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. <๊ทธ๋ฆผ 2>๋Š” <๊ทธ๋ฆผ 1>์„ ๋‹จ์ง€๋ณ„๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ธ ๊ฒƒ์ด๋‹ค. ์ง€๋„๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋‹จ์ง€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๊ฐ ๋‹จ์ง€์— ์†ํ•˜๋Š” ์ง‘์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ง€๋„์˜ ํฌ๊ธฐ N(์ •์‚ฌ๊ฐํ˜•์ด๋ฏ€๋กœ ๊ฐ€๋กœ์™€ ์„ธ๋กœ์˜ ํฌ๊ธฐ๋Š” ๊ฐ™์œผ๋ฉฐ 5≤N≤25)์ด ์ž…๋ ฅ๋˜๊ณ , ๊ทธ ๋‹ค์Œ N์ค„์—๋Š” ๊ฐ๊ฐ N๊ฐœ์˜ ์ž๋ฃŒ(0ํ˜น์€ 1)๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.

 

์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ด ๋‹จ์ง€์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋‹จ์ง€๋‚ด ์ง‘์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•˜์‹œ์˜ค.


์šฐ์„ ์ ์œผ๋กœ ํ•œ์ค„์”ฉ ์ž…๋ ฅ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ž˜ํ”„ ๋ฐฐ์—ด์— ๋„ฃ๊ธฐ ์œ„ํ•ด string์œผ๋กœ ๋ฐ›์€ ํ›„, ํ•œ ๋ฌธ์ž์”ฉ 0๊ณผ 1๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์— ์ง‘์–ด๋„ฃ์—ˆ๋‹ค.

์ดํ›„ DFS๋ฅผ ํ†ตํ•ด ์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ์œผ๋กœ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„ ํ™•์ธํ•˜๋ฉฐ ๋‹จ์ง€ ๋‚ด ์ง‘์˜ ์ˆ˜๋ฅผ ์„ธ์–ด์ค€๋‹ค. ํ•œ ๋‹จ์ง€ ๋‚ด ํƒ์ƒ‰์ด ์™„๋ฃŒ๋  ๋•Œ ๋งˆ๋‹ค sorting ์ด๋ผ๋Š” ๋ฒกํ„ฐ ์ž๋ฃŒํ˜•์— ํ•œ ๋‹จ์ง€ ๋‚ด ์ง‘์˜ ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์™„๋ฃŒ ํ›„ sorting ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ฝ”๋“œ
#include <cstdio>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define MAX 26

using namespace std;
 
int graph[MAX][MAX];

int dx[] = { -1, 1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
int n, c;
vector<int> sorting;
 
void DFS(int a, int b);
 
int main()
{
    scanf("%d", &n);
    string temp;

    for(int i = 1; i <= n; i++) {
        cin >> temp;
        for(int j = 1; j <= n; j++) {
            graph[i][j] = (temp[j - 1] - '0');
        }
    }

    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if(graph[i][j] == 1) {
                c = 0;
                DFS(i, j);
                sorting.push_back(c);
            }
        }
    }

    sort(sorting.begin(), sorting.end());
 
    printf("%lu\n",sorting.size());
 
    for(int i = 0; i < sorting.size(); i++) {
        printf("%d\n", sorting[i]);
    }
 
    return 0;
}

void DFS(int a, int b)
{
    graph[a][b] = 0;
    c++;

    for(int i = 0; i < 4; i++) {
        if(a + dy[i] < 1 || a + dy[i] > n || b + dx[i] < 1 || b + dx[i] > n) continue;
        if(graph[a + dy[i]][b + dx[i]] == 1)
            DFS(a + dy[i], b + dx[i]);
    }
}
Comments