[C++] 프로그래머스 : 네트워크

wldud·2024년 6월 24일
0

알고리즘

목록 보기
21/34
#include <string>
#include <vector>

using namespace std;



void dfs(int a, vector<bool>& visited, vector<vector<int>>& v){
        visited[a] = true;
        for(int i=0;i<v[a].size();i++){
            if(visited[v[a][i]] == false){
                dfs(v[a][i], visited, v);
            }

        }
}

int solution(int n, vector<vector<int>> computers) {
    vector<bool> visited(n, false);
    vector<vector<int>> v(n);
    int answer = 0;

    for(int i=0;i<computers.size();i++){
        for(int j=0;j<computers[i].size();j++){
            if(i==j)continue;
            if(computers[i][j] == 1){
                v[i].push_back(j);
            }
        }
    }
    
    for(int i=0;i<n;i++){
        if(visited[i] == false){
            dfs(i, visited, v);
            answer++;
        }
    }
    
    return answer;
}

dfs를 이용해서 풀었고 i=0부터 탐색하면서 방문하지 않았다면(visited == false) dfs를 이용해서 이어진 노드들을 방문하고 answer을 1 증가시켜주었다.

0개의 댓글