๐Ÿ’ป

[๋ฐฑ์ค€] DFS์™€BFS - 2667. ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ(DFSํ’€์ด) ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] DFS์™€BFS - 2667. ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ(DFSํ’€์ด)

๋˜ํšจ๋‹ˆ 2020. 2. 20. 11:11

๋ฌธ์ œ

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

 

์ž…๋ ฅ

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

 

์ถœ๋ ฅ

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

 

์˜ˆ์ œ ์ž…๋ ฅ1

7
0110100
0110101
1110101
0000111
0100000
0111110
0111000

 

์˜ˆ์ œ ์ถœ๋ ฅ1

3

7

8

9

 

์ƒ๊ฐ

์—ฌ๋Ÿฌ๋ฒˆ ์•„๋ฌด๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋˜ ๋ด๋„ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค ๋ผ๊ณ  ๋‚˜์˜ค๊ธธ๋ž˜ ๊ตฌ๊ธ€๋ง ํ•ด๋ดค๋”๋‹ˆ 

 

ios::sync_with_stdio(false); ๋ฌธ์„ ์ด์šฉํ•˜๋ฉด,
cin, cout๊ณผ printf, scanf ๋ฅผ ํ˜ผ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

[์ถœ์ฒ˜] ๋ฐฑ์ค€ 2667๋ฒˆ : ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ(C++)|์ž‘์„ฑ์ž archSlave

 

๋ผ๊ณ  ๋‚˜์™”๋‹ค. ์„ธ์ƒ์—๋‚˜!

์Šต๊ด€์ ์œผ๋กœ cin์„ ์“ฐ๋‹ค๊ฐ€ ์‹คํ–‰ํ–ˆ๋”๋‹ˆ ์ด์ƒํ•˜๊ธธ๋ž˜ ๋ดค๋”๋‹ˆ ์ž…๋ ฅํ•  ๋•Œ ํ•œ์ž๋ฆฌ์”ฉ ์ž…๋ ฅ๋ฐ›์•˜์–ด์•ผ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ scanf๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฑฐ์˜€๋Š”๋ฐ...

๊ฐ™์ด ํ˜ผ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ฒ˜์Œ ์•Œ์•˜๋‹ค... ํ  ์™œ๊ทธ๋Ÿฐ๊ฐ€ ๊ถ๊ธˆํ•˜์—ฌ ์ข€ ๋” ์ฐพ์•„๋ณด๋‹ˆ

 

ios::sync_with_stdio๋Š” cpp์˜ iostream์„ c์˜ stdio์™€ ๋™๊ธฐํ™”์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์ธ true์ผ ๋•Œ๋Š” cout << "HI"; printf("BYE"); cout<<"hi" ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅ๋˜์ง€๋งŒ, false์ผ๋•Œ๋Š” ์–ด๋–ค ์ˆœ์„œ๋กœ ์ถœ๋ ฅ๋ ์ง€ ์•Œ ์ˆ˜๊ฐ€ ์—†์ฃ . 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ios::sync_with_stdio(false); ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹œ๋ฉด, 

iostream ํ•จ์ˆ˜์ธ cin/ cout์„ stdio ํ•จ์ˆ˜์ธ getchar()์™€ ๊ฐ™์ด ์“ฐ์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

[์ถœ์ฒ˜] https://www.acmicpc.net/board/view/8074

 

๋‚˜์™€ ๋˜‘๊ฐ™์€ ํ˜ธ๊ธฐ์‹ฌ์œผ๋กœ ๊ธ€์„ ์˜ฌ๋ฆฐ ์‚ฌ๋žŒ์ด ์žˆ์—ˆ๊ณ  ์ด์™€ ๊ฐ™์€ ๋‹ต๋ณ€์ด ๋‹ฌ๋ ค์žˆ์—ˆ๋‹ค.

์“ฐ๋ฉด ์•ˆ๋˜๋Š” ๊ตฌ๋‚˜...! ๋‹ค์Œ ๋ถ€ํ„ฐ ์กฐ์‹ฌํ•ด์•ผ๊ฒ ๋‹ค  +  ์ž…๋ ฅ ์˜ˆ์ œ ์ž˜ ๋ณด๊ณ  cin์„ ์‚ฌ์šฉํ•ด๋„ ๋˜๋Š” ์ง€ ์•„๋‹Œ์ง€ ๊ผญ ํ™•์ธํ•  ๊ฒƒ!

 

์ž‘์„ฑํ•œ ์ฝ”๋“œ

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>

#define MAX 30

using namespace std;

int n;
int map[MAX][MAX];
bool visited[MAX][MAX];
// ์ƒ, ํ•˜, ์ขŒ, ์šฐ
int dx[] = { -1, 1, 0, 0};
int dy[] = { 0, 0, -1, 1};
int cnt; // ๋‹จ์ง€ ๊ฐฏ์ˆ˜
vector<int> v; // ์ง‘ ๊ฐฏ์ˆ˜

void dfs(int x, int y){
    cnt ++;
    visited[x][y] = true;
    for(int i=0; i<4; i++){
        int nx = x+dx[i];
        int ny = y+dy[i];
        if(nx < 0 || ny < 0 || nx >= n || ny >= n)
            continue;
        if(map[nx][ny] == 1 && !visited[nx][ny]){
            dfs(nx, ny);
        }
    }
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    scanf("%d", &n);

    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            scanf("%1d", &map[i][j]);
        }
    }
    
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(map[i][j] == 1 && !visited[i][j]){
                cnt = 0;
                dfs(i,j);
                v.push_back(cnt);
            }
        }
    }
    sort(v.begin(), v.end());
    
    printf("%ld\n", v.size());
    for(int i=0; i<v.size(); i++){
        printf("%d\n", v[i]);
    }
    
    return 0;
}

๋ฐ˜์‘ํ˜•
Comments