๐Ÿ’œ๊ฐœ๋ฐœ๊ณผ ์ผ์ƒ (โ‰ง∇โ‰ฆ)๏พ‰

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ๋„คํŠธ์›Œํฌ (DFS,BFS - L3) ๋ณธ๋ฌธ

CS/๋ฐฑ์ค€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/C++] ๋„คํŠธ์›Œํฌ (DFS,BFS - L3)

๊ฐ•์˜์„œ 2023. 11. 17. 18:07

https://school.programmers.co.kr/learn/courses/30/lessons/43162

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

๊ฐ ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ํ•œ ๋ฌถ์Œ์„ ๋„คํŠธ์›Œํฌ๋ผ ์นญํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ด ๋ช‡๊ฐœ์ธ์ง€? ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ.

 

BFS๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•„์ž๋Š” DFS๋กœ ํ’€์—ˆ๊ณ , 

๊ฐ ๋…ธ๋“œ ๋ณ„๋กœ ํƒ์ƒ‰์„ ํ•˜๋˜, ํ•œ๋ฒˆ ํƒ์ƒ‰์„ ํ–ˆ๋˜ ๊ธฐ๋ก์„ visited์— ์ €์žฅํ•ด์„œ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋„๋ก ํ–ˆ๋‹ค.

์™œ๋ƒ๋ฉด ๋‹จ ํ•˜๋‚˜๋ผ๋„ ์—ฐ๊ฒฐ์ด ๋˜๋ฉด ๊ทธ ๋…ธ๋“œ๋Š” ๋„คํŠธ์›Œํฌ์— ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ชจ๋“  ๋…ธ๋“œ์™€๋„ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ๋Š” ๋…ธ๋“œ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๋‹จ์ผ ๋„คํŠธ์›Œํฌ์ด๋ฏ€๋กœ ๊ทธ ๋ถ€๋ถ„์„ ์„ธ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ—ธ๋‹ค.

 

#include <string>
#include <vector>
#include <iostream>

using namespace std;

bool visited[201];
vector<int> connected[201];
int n;


void DFS(int idx){
    
    //๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ ์ง„ํ–‰
    if(visited[idx] == false) visited[idx] = true;
    else return;
    
    
    //์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์„ ํ™•์ธ
    for(int i = 0; i < connected[idx].size(); i++){
        
        //์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ํƒ์ƒ‰
        DFS(connected[idx][i]);
    }

}

int solution(int _n, vector<vector<int>> computers) {
    
    // 1 <= n <= 200 ์ž์—ฐ์ˆ˜
    n = _n;
    int answer = 0;
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            
            if(i == j) continue;
            
            if(computers[i][j] == 1) connected[i].push_back(j);
        }
    }
    
    //๊ฐ ๋…ธ๋“œ๋ณ„ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค
    for(int i = 0; i < n ; i++){
        
        
        //ํ•˜๋‚˜๋„ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ, ๋„คํŠธ์›Œํฌ ํ•˜๋‚˜๋กœ ์ทจ๊ธ‰
        if(connected[i].size() == 0){
            
            cout << "alone" << endl;
            answer++;
            continue;
        }
        
        
        //์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€๋งŒ, 
        if(visited[i] == false) {
            
            cout << "ํƒ์ƒ‰" << endl;
            
            DFS(i);
            answer++;
        }
    }
    
    return answer;
}

 

๊ฒฐ๊ณผ