Game Develop

[Algorithm] Programmers :: 네트워크 본문

Algorithm/Programmers

[Algorithm] Programmers :: 네트워크

MaxLevel 2022. 5. 19. 21:43

https://programmers.co.kr/learn/courses/30/lessons/43162?language=cpp 

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
vector<vector<int>> graph;
bool visitedMap[200];
 
void DFS(int n)
{
    if (visitedMap[n]) return;
    visitedMap[n] = true;
 
    for (int i = 0; i < graph[n].size(); i++// n과 연결된 노드들 탐색.
    {
        int nextNode = graph[n][i];
        DFS(nextNode);
    }
}
 
int solution(int n, vector<vector<int>> computers) 
{
    int answer = 0;
    graph.resize(n);
 
    for (int i = 0; i < computers.size(); i++)
    {
        for (int j = 0; j < computers[0].size(); j++)
        {
            if (i == j) continue// 자기자신은 제외
            if (computers[i][j] == 1// i랑 j가 연결되어있으면,
            {
                graph[i].push_back(j);
            }
        }
    }
 
    for (int i = 0; i < computers.size(); i++)
    {
        if (visitedMap[i]) continue;
        DFS(i);
        answer++;
    }
 
    return answer;
}
cs

 

각 노드들의 덩어리개수를 구하는 문제다.

먼저 그래프를 인접리스트로 모델링 한 후에, 방문안된 노드들에 한해서 DFS를 돌리고 answer++을 한다.

DFS를 진행한 노드들은 앞서 탐색이 안된 노드들이기 때문에 새로운 덩어리의 출발로 인지한다.