코딩테스트 연습 - 네트워크 | 프로그래머스 스쿨 (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;
}
'코딩테스트 > C++' 카테고리의 다른 글
[프로그래머스 Level 3] 야근 지수(C++) (0) | 2024.06.11 |
---|---|
[프로그래머스 Level 3] 이중우선순위큐(C++) (0) | 2024.06.09 |
[프로그래머스 Level 2] 도넛과 막대 그래프(C++) (0) | 2024.05.29 |
[프로그래머스 Level 2] 단체사진 찍기(C++) (0) | 2024.05.21 |
[프로그래머스 Level 2] 택배 배달과 수거하기(C++) (0) | 2024.05.19 |