[PS] 네트워크
2025. 11. 10. 20:15
 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

문제

- 네트워크(인접 리스트)의 개수 구하기

 

풀이

컴퓨터의 개수 n과 연결 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 구하는 문제이다.

네트워크 정의가 뭐지.. 하고 입출력을 일일히 확인해봤다 ㅎㅎ;;

computers[i][j]가 1이면 i번 컴퓨터와 j번 컴퓨터가 연결되어 있다는 의미이고

이 연결 고리들이 네트워크 1개이다!

 

만약 연결되어 있지 않은 컴퓨터가 있다면 네트워크 1개를 추가해야 한다.

 

핵심

  • i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 j번 컴퓨터와 i번 컴퓨터도 연결되어 있다. (양방향 연결)
  • i번 컴퓨터와 i번 컴퓨터는 항상 연결되어 있다. (자기 자신과의 연결)

위 두 가지를 고려하고, 그래프 탐색을 하면 된다.

 

DFS와 BFS 모두 가능하지만, BFS에 취약해서 BFS로 풀어보았다

코드

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

using namespace std;

void bfs(int start_node, int n, vector<vector<int>>& computers, vector<bool>& visited_nodes) {
    queue<int> q;
    q.push(start_node);
    visited_nodes[start_node] = true;
    
    while (!q.empty()) {
        int current_node = q.front();
        q.pop();
        
        for (int neighbor_node = 0; neighbor_node < n; ++neighbor_node) {
            // 1. 자기 자신(current_node == neighbor_node)이 아니고
            // 2. 연결되어 있고 (computers[current_node][neighbor_node] == 1)
            // 3. 아직 방문하지 않았다면 (!visited_nodes[neighbor_node])
            if (current_node != neighbor_node && computers[current_node][neighbor_node] == 1 && !visited_nodes[neighbor_node]) {
                q.push(neighbor_node);
                visited_nodes[neighbor_node] = true;
            }
        }
    }
}

int solution(int n, vector<vector<int>> computers) {
    int network_count = 0;
    vector<bool> visited_nodes(n, false); 
    
    // 모든 컴퓨터를 순회하며 아직 방문하지 않은 컴퓨터를 찾음
    for (int i = 0; i < n; ++i) {
        if (!visited_nodes[i]) {
            bfs(i, n, computers, visited_nodes);
            network_count++;
        }
    }
    
    return network_count;
}

 

회고

BFS/DFS 문제는 대부분 DFS로 푸는 게 더 편하긴 한 것 같다

'PS > 프로그래머스' 카테고리의 다른 글

[PS] 아이템 줍기  (0) 2025.11.13
[PS] N-Queen  (0) 2025.11.12
[PS] PCCP 모의고사 1회 - 1번 외톨이 알파벳  (0) 2025.10.30
[PS] 타겟 넘버  (0) 2025.10.01
[PS] 완주하지 못한 선수 (c++, js)  (0) 2025.09.17