ํ๋ก๊ทธ๋๋จธ์ค/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