와이유스토리

[Union-Find] 프로그래머스 네트워크 C++ 본문

코딩테스트/분리집합

[Union-Find] 프로그래머스 네트워크 C++

유(YOO) 2022. 1. 20. 21:37

 

https://programmers.co.kr/learn/courses/30/lessons/43162

 

코딩테스트 연습 - 네트워크

네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있

programmers.co.kr

 

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int parent[201];

int find(int x) {
    if (x == parent[x]) return x;
    return parent[x] = find(parent[x]);
}

void unions(int x, int y) {
    x = find(x);
    y = find(y);
    
    // x!=y (x)
    if (x<y) parent[y] = x;
    else if (x>y) parent[x] = y;
}

int solution(int n, vector<vector<int>> computers) {
    int answer = 0;
    
    for(int i=0; i<n; i++) parent[i] = i;
    
    for(int i=0; i<n; i++) {
        for(int j=0; j<n; j++) { // j=i+1 (x), j=n-1 (o) 
            if ((computers[i][j] == 1) && (i!=j)) 
            	unions(i, j);
        }
    }
    
    // 9번 tc 해결
    for(int i=0; i<n; i++) parent[i] = find(i);
 
    sort(parent, parent+n);
    answer++;
    
    for(int i=0; i<n-1; i++) {
        if (parent[i] != parent[i+1]) answer++;
    }
    
    return answer;
}

※ DFS 풀이

https://whyou-story.tistory.com/64

 

[DFS] 프로그래머스 네트워크

#include #include using namespace std; int check[201]; void dfs(int n, vector > computers, int idx){ check[idx] = 1; for(int i=0; i > computers) { int answer = 0; for(int i=0; i ※ Union-Find 풀이 h..

whyou-story.tistory.com

 

'코딩테스트 > 분리집합' 카테고리의 다른 글

[Union-Find] 백준 17619 개구리 점프 C++  (0) 2022.01.27
Comments