[Programmers/C++] 네트워크

GamzaTori·2025년 2월 2일

Algorithm

목록 보기
125/133

시간 복잡도

  • BFS를 연결리스트를 이용하여 구현하면 시간 복잡도는 O(ElogV)O(ElogV) 입니다.

문제 접근법

  • 연결되어 있는 네트워크 그룹의 개수를 구하는 문제입니다.
  • BFS를 이용하면 탐색 과정에서 방문한 모든 노드들은 하나의 네트워크에 속하게 됩니다,
  • 방문하지 않은 모든 노드들을 대상으로 BFS를 수행하며 정답을 카운트합니다.

코드

#include <string>
#include <vector>
#include <queue>

using namespace std;

static vector<vector<int>> G;
static vector<int> visited;

void BFS(int node)
{
    queue<int> q;
    q.push(node);
    visited[node]=true;
    
    while(!q.empty())
    {
        int now = q.front();
        q.pop();
        
        for(int next : G[now])
        {
            if(!visited[next])
            {
                visited[next]=true;
                q.push(next);
            }
        }
    }
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    G.resize(n);
    visited.resize(n, false);
    
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            if(i==j)
                continue;
            
            if(computers[i][j])
            {
                G[i].push_back(j);
                G[j].push_back(i);
            }
        }
    }
    
    for(int i=0; i<n; i++)
    {
        if(!visited[i])
        {
            BFS(i);
            answer++;
        }
    }
    
    
    return answer;
}
profile
게임 개발 공부중입니다.

0개의 댓글