알고리즘/프로그래머스

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

겜도리도리 2021. 11. 19. 23:54
반응형

문제

프로그래머스 43162 네트워크 C++

 

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

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

programmers.co.kr

풀이

BFS를 사용합니다.

1. 네트워크에 방문해, 인근 네트워크를 모두 방문 처리 해줍니다.

2. N번째 네트워크까지 반복하면서, 그 네트워크를 방문하지 않았다면 1과정을 반복합니다.

3. 총 네트워크의 개수를 return 합니다.

소스 코드

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
42
43
44
#include <string>
#include <vector>
#include <queue>
using namespace std;
 
bool visited[201];
int result;
 
void bfs(int start, vector<vector<int>> v, int length) {
    // 방문했으면 return
    if (visited[start])
        return;
    // 네트워크 존재하므로 result++
    result++;
    visited[start] = true;
    queue<int> q;
    q.push(start);
    while (!q.empty()) {
        int node = q.front();
        node--;
        q.pop();
        // 인근 노드 방문
        for (int i = 0; i < length; i++) {
            // 연결되어있지 않으면 continue
            if (!v[node][i])
                continue;
            int next = i + 1;
            // 연결되어있고 방문한 적이 없으면 push
            if (!visited[next]) {
                visited[next] = true;
                q.push(next);
            }
        }
    }
}
 
int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    for (int i = 1; i <= n; i++) {
        bfs(i, computers, n);
    }
    answer = result;
    return answer;
}
cs
반응형