코딩테스트/C++
[프로그래머스 Level 3] 네트워크(C++)
최-코드
2024. 6. 7. 22:23
코딩테스트 연습 - 네트워크 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
연결된 컴퓨터를 그룹으로 묶어주고 그룹의 개수를 세주는 문제이다. 즉 전형적인 union-find 문제이다.
#include <string>
#include <vector>
using namespace std;
int parent[200];
int findParent(int node) {
if (parent[node] == node) {
return node;
}
return parent[node] = findParent(parent[node]);
}
void unionNode(int x, int y) {
int p1 = findParent(x);
int p2 = findParent(y);
if (p1 > p2) {
parent[p2] = p1;
}
else {
parent[p1] = p2;
}
}
int checked[200];
int solution(int n, vector<vector<int>> computers) {
for (int i = 0; i < n; i++) {
parent[i] = i;
}
int answer = 0;
for (int i = 0; i < computers.size(); i++) {
for (int j = 0; j < computers[i].size(); j++) {
if (j != i && computers[i][j] == 1) {
unionNode(i, j);
}
}
}
for (int i = 0; i < n; i++) {
if (!checked[findParent(i)]) {
answer++;
checked[findParent(i)] = true;
}
}
return answer;
}