728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42861
ํ๋ก๊ทธ๋๋จธ์ค ๊ทธ๋ฆฌ๋ - ์ฌ ์ฐ๊ฒฐํ๊ธฐ ๋ฌธ์
์๋๋ ๊ฐ ํธ๋ฆฌ์ ์ต์๋จ ๋ถ๋ชจ๊ฐ์ ์ฌ๊ท์ ์ผ๋ก ์ฐพ๋ ๊ฒ ์ ์ ํ์ด์ธ๋ฐ,
๋๋ ๋ณต์กํด์ ๊ทธ๋ฅ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ต์ ๋ถ๋ชจ๊ฐ๋ง ์ ์ฅํด๋๊ณ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ฐฑ์ ํ๋ค.
1. ์ต์ ์ ์ฅ ํธ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด, Greedy๋ก ์ต์๊ฐ ๊ฐ์ ๋ถํฐ ์ฐพ๋ ๊ฒ ํฌ์ธํธ!
2. ๊ฐ ํธ๋ฆฌ์ ์ต์ ๋ถ๋ชจ๊ฐ์ ๋น๊ตํด์, ๊ฐ์ผ๋ฉด ํ ํธ๋ฆฌ ๋ด๋ถ์ ์๋ ๊ฒ์ผ๋ก ๋ณด๊ณ , ๋ค๋ฅด๋ค๋ฉด ๋ ํธ๋ฆฌ๋ฅผ ์ด์ด์ค.
๋์ ํ์ด
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int indexParent[101] = {0,};
int n;
bool cmp(vector<int> a, vector<int> b){
return a[2] < b[2];
}
void unionNodes(int start, int end){
int big; int small;
if(indexParent[start] < indexParent[end]){
big = indexParent[end];
small = indexParent[start];
}
else{
small = indexParent[end];
big = indexParent[start];
}
for(int i=0; i<n; ++i){
if(indexParent[i]==big) indexParent[i] = small;
}
return;
}
int solution(int N, vector<vector<int>> costs) {
n = N;
int answer = 0;
int size = costs.size();
sort(costs.begin(), costs.end(), cmp);
for(int i=0; i<n; ++i) indexParent[i] = i;
for(auto cost: costs){
int startNode = cost[0];
int endNode = cost[1];
int bridge = cost[2];
if(indexParent[startNode] != indexParent[endNode]){ // ์ต์ ๋ถ๋ชจ๊ฐ์ด ๋ค๋ฅด๋ฉด
unionNodes(startNode, endNode); // ํธ๋ฆฌ ํฉ์น๊ธฐ, ๋ถ๋ชจ๊ฐ ๊ฐฑ์
answer += bridge;
}
bool isEnd = true;
for(int i=0; i<n-1; ++i){
if(indexParent[i] != indexParent[i+1]) {
isEnd = false;
break;
}
}
if(isEnd) break;
}
return answer;
}
728x90
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/PGS] Lv.1 : ๋ฌ๋ฆฌ๊ธฐ ๊ฒฝ์ฃผ (ํด์๋งต Map) (0) | 2024.10.03 |
---|---|
[MySQL/PGS] Lv.1 : ์๋์ฐจ ๋์ฌ ๊ธฐ๋ก์์ ์ฅ๊ธฐ/๋จ๊ธฐ ๋์ฌ ๊ตฌ๋ถํ๊ธฐ (0) | 2023.09.19 |
[C++/PGS] Lv.2 : ๋ ๋งต๊ฒ (ํ Heap) (1) | 2023.09.19 |
[C++/PGS] Lv.3 : ์ด์ค์ฐ์ ์์ํ (0) | 2023.09.17 |
[C++/PGS] Lv.2 : ์ด์ง ๋ณํ ๋ฐ๋ณตํ๊ธฐ (0) | 2023.09.17 |