ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/3๋‹จ๊ณ„

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv3] : ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

Jaeguk 2022. 6. 23. 16:37
๋ฌธ์ œ ๋งํฌ

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4

programmers.co.kr

์ตœ์†Œ๋น„์šฉ์œผ๋กœ n๊ฐœ์˜ ์„ฌ์ด ๋ชจ๋‘ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฌธ์ œ.

 

ํ’€์ด

๋‹ค๋ฆฌ๋ฅผ ํ†ตํ•ด์„œ ํ†ตํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋‘ ์„ฌ์€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋‹ค๊ณ  ๋ณธ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ณด๋ฉด ์ตœ์†Œ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ ๋ฌธ์ œ์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ์„ฌ์ด ๊ณตํ†ต ์กฐ์ƒ์„ ๊ฐ€์ง€๋„๋ก ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

 

์ฝ”๋“œ ์ž‘์„ฑ
 
#include <string>
#include <vector>
#include <queue>
using namespace std;
const int MAX_N = 100 + 5;
int Parent[MAX_N];
 
int Find(int x){
    if(Parent[x] == x)
        return x;
    return Parent[x] = Find(Parent[x]);
 
void Union(int x, int y){
    int parent_x = Find(x);
    int parent_y = Find(y);
    Parent[parent_y] = parent_x;
}
 
int solution(int n, vector<vector<int>> costs) {
    int answer = 0;
    for(int i = 0; i<n ;i++)
        Parent[i] = i;
    priority_queue<pair<int,pair<int,int>>> pq;
    
    for(int i = 0; i<costs.size(); i++)
        pq.push({-costs[i][2],{costs[i][0], costs[i][1]}});
    
    while(!pq.empty()){
        int cost = -pq.top().first;
        int u = pq.top().second.first;
        int v = pq.top().second.second;
        pq.pop();
        if(Find(u) != Find(v)){ //์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด
            Union(u,v);
            answer += cost;
        }
        else continue;
    }
    return answer;
}
cs

 

728x90