카테고리 없음
[프로그래머스] 네트워크(C++)
Majangnan
2025. 4. 28. 17:14
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43162
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 구현
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 모든 컴퓨터가 간접적으로 연결되어 있으면 하나의 네트워크
// dfs 로 방문체크 하면서 순환 -> dfs 횟수 = 네트워크 개수
bool visited[200];
int answer = 0;
void dfs(const vector<vector<int>>& computers, int startNode)
{
if (visited[startNode] == true) return;
visited[startNode] = true;
for (int i = 0; i < computers.size(); i++)
{
if (computers[startNode][i])
{
dfs(computers, i);
}
}
}
int solution(int n, vector<vector<int>> computers)
{
for (int i = 0; i < n; i++)
{
if (!visited[i])
{
dfs(computers, i);
answer++;
}
}
return answer;
}
해결 방법
dfs를 이용하여 해결하였다. 0번 컴퓨터부터 순회를 시작하여 연결되어있는 모든 컴퓨터를 깊이 우선 탐색으로 순회하고, 방문한 컴퓨터들을 방문 체크 한다. 순회 한 번이 끝나면 네트워크 개수를 하나 추가한다. 연결 되어 있지 않은 컴퓨터가 있으면 방문 체크가 되어있지 않은 컴퓨터부터 다시 순회를 시작하고 순회가 끝나면 네트워크 개수를 추가한다.