๐Ÿ’ป

[๋ฐฑ์ค€] DFS์™€BFS - 10026. ์ ๋ก์ƒ‰์•ฝ ๋ณธ๋ฌธ

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

[๋ฐฑ์ค€] DFS์™€BFS - 10026. ์ ๋ก์ƒ‰์•ฝ

๋˜ํšจ๋‹ˆ 2020. 2. 28. 14:48

๋ฌธ์ œ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก), B(ํŒŒ๋ž‘) ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ‰์น ํ•œ ๊ทธ๋ฆผ์ด ์žˆ๋‹ค. ๊ทธ๋ฆผ์€ ๋ช‡ ๊ฐœ์˜ ๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋Š”๋ฐ, ๊ตฌ์—ญ์€ ๊ฐ™์€ ์ƒ‰์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋˜, ๊ฐ™์€ ์ƒ‰์ƒ์ด ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๋‘ ๊ธ€์ž๋Š” ๊ฐ™์€ ๊ตฌ์—ญ์— ์†ํ•œ๋‹ค. (์ƒ‰์ƒ์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ฐ™์€ ์ƒ‰์ƒ์ด๋ผ ํ•œ๋‹ค)

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋ฆผ์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—

-----------------------------------

RRRBB

GGBBB

BBBRR

BBRRR

RRRRR

-----------------------------------

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋Š” ์ด 4๊ฐœ์ด๋‹ค. (๋นจ๊ฐ• 2, ํŒŒ๋ž‘ 1, ์ดˆ๋ก 1) ํ•˜์ง€๋งŒ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์€ ๊ตฌ์—ญ์„ 3๊ฐœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (๋นจ๊ฐ•-์ดˆ๋ก 2, ํŒŒ๋ž‘ 1)

๊ทธ๋ฆผ์ด ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์™€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 100)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ ์ค„์—๋Š” ๊ทธ๋ฆผ์ด ์ฃผ์–ด์ง„๋‹ค.

 

์ถœ๋ ฅ

์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์˜ ๊ตฌ์—ญ์˜ ๊ฐœ์ˆ˜์™€ ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ์˜ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ1

5
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR

 

์˜ˆ์ œ ์ถœ๋ ฅ1

4 3 

 

์ƒ๊ฐ

R, G, B๊ฐ’์„ ๊ฐ๊ฐ 1,2,3์œผ๋กœ ํ•ด์„œ ์ž…๋ ฅ์‹œ์— map๋ฐฐ์—ด์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค. ์ œ์ถœํ•˜๊ณ  ๋ณด๋‹ˆ map์„ charํ˜•์œผ๋กœ ๋†“๊ณ  ์ž…๋ ฅ๊ฐ’ R,G,B๊ทธ๋Œ€๋กœ ํ–ˆ์—ˆ์–ด๋„ ๋˜๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ ๊ทธ๋žฌ๋‹ค.

nomal, abnomal ๋กœ ๋ณ€์ˆ˜๋ฅผ ๋‘๊ณ  ์ •์ƒ์ธ๊ณผ ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ผ ๋•Œ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๊ณ  ์ ๋ก์ƒ‰์•ฝ์˜ ๊ฒฝ์šฐ ์ดˆ๋ก์ผ๋•Œ์™€ ๋นจ๊ฐ•๊ณผ ๊ฐ™์€ ๊ฐ’์œผ๋กœ map๊ฐ’์„ ๋ฐ”๊ฟ”์คฌ๋‹ค. memset์€ ์ •์ƒ์ธ์˜ ๊ตฌ์—ญ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ๋‚˜์„œ ๊ทธ ์ „์— visited๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์˜€๋‹ค. 

 

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

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#define MAX 100

using namespace std;

int n;
char c; // R, G, B ์ž…๋ ฅ๋ฐ›๊ธฐ์œ„ํ•ด
int map[MAX][MAX];
bool visited[MAX][MAX];
// ์ƒ,ํ•˜,์ขŒ,์šฐ
int dx[] = { -1, 1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
int nomal, abnomal = 0;

void dfs(int x, int y){
    visited[x][y] = true;
    int val = map[x][y];
    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] == val && !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);
    
    cin >> n;
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> c;
            if(c == 'R'){
                map[i][j]=1; // ๋นจ๊ฐ•
            }else if(c == 'B'){
                map[i][j]=2; // ํŒŒ๋ž‘
            }else{
                map[i][j]=3; // ์ดˆ๋ก
            }
            
        }
    }
    
   // ์ •์ƒ ์‚ฌ๋žŒ์ผ ๋•Œ
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(!visited[i][j]){
                nomal++;
                dfs(i,j);
            }
        }
    }
    
    // ์ ๋ก ์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(map[i][j] == 3){ // ์ดˆ๋ก์ด๋ฉด ๋นจ๊ฐ•์œผ๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค
                map[i][j] = 1;
            }
        }
    }
    memset(visited, 0, sizeof(visited));
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(!visited[i][j]){
                abnomal++;
                dfs(i,j);
            }
        }
    }

    cout << nomal << ' ' << abnomal << '\n';

    return 0;
}

๋ฐ˜์‘ํ˜•
Comments