본문 바로가기
알고리즘/프로그래머스

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

by 오오오니 2024. 2. 7.

풀이

간단한 dfs문제였다 노드는 좌표가 아니라 번호로 주어졌고 연결 여부는 2차원 벡터로 주어졌다.
인접행렬말 인접리스트를 이용해 풀었다.
방문하지 않았던 노드라면 그 노드부터 dfs를 수행한다. 노드를 방문하면 chk에 방문여부를 저장해준다.
dfs를 수행한 횟수가 네트위크 개수이므로 답으로 반환한다.

#include <string>
#include <vector>
#include <iostream>
using namespace std;

vector<int>node[201];
vector<bool>chk(201,0);

void dfs(int idx){
    chk[idx]=true;
    for(int i=0;i<node[idx].size();i++){
        if(!chk[node[idx][i]])
            dfs(node[idx][i]);
    }
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    int com_size = computers.size();
    for(int i=0;i<com_size ;i++){
        for(int j=i+1;j<com_size;j++){
            
            if(computers[i][j]){
                node[i].push_back(j);
                node[j].push_back(i);
            }
        }
    }

    
    for(int i=0;i<com_size;i++){
        if(!chk[i]){
            dfs(i);
            answer++;
        }
    }
    return answer;
}