이 문제의 경우 프로그래머스 에서 dfs, bfs로 분류를 해놓았다 하지만 문제를 보았을 때 해당 방식으로 푸는것 보다는 그래프 이론중 유니온 파인드를 통해서 푸는게 더 맞는 방식으로 생각되어 해당 방식으로 풀이를 진행 하였다
#include <string>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
int parent[200];
int GetParent(int x) {
if (parent[x] == x)
return parent[x];
else {
parent[x] = GetParent(parent[x]);
return parent[x];
}
}
bool IsSameParent(int x, int y) {
if (GetParent(x) != GetParent(y)) {
return false;
}
else
return true;
}
void MakeSameParent(int x, int y) {
if (!IsSameParent(x, y)) {
parent[GetParent(y)] = GetParent(x);
}
}
int solution(int n, vector<vector<int>> computers) {
int answer = 0;
set<int> s;
for (int i = 0; i < n ; i++) {
parent[i] = i;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if(computers[i][j]==1)
MakeSameParent(i, j);
}
}
for (int i = 0; i < n ; i++) {
s.insert(GetParent(parent[i]));
}
answer = s.size();
return answer;
}
int main() {
vector<vector<int>> computers = { {1,1,1},{1,1,0},{1,0,1} };
int n = 3;
cout<<solution(3, computers);
}