๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/42861
ํ์ด
Kruskal(ํฌ๋ฃจ์ค์นผ) ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
- ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ ์ฐ๊ฒฐ์ ๋๋ ๋น์ฉ์ด ์ ์ ์์๋๋ก costs๋ฅผ ์ ๋ ฌํ๋ค.
- set[i]๋ฅผ ์ด๊ธฐํํด์ค๋ค. set[i]๋ i๋ฒ์งธ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ด๋ค. ๋ถ๋ชจ๋ ธ๋๋ i๋ฒ์งธ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋ ์ค์์ ์ธ๋ฑ์ค๊ฐ ๊ฐ์ฅ ์์ ๋ ธ๋์ด๋ค.
- ์๋ฅผ ๋ค์ด ๋ ธ๋0๊ณผ ๋ ธ๋1์ด ์ฐ๊ฒฐ๋๋ฉด set[0] = 0, set[1] = 0์ด ์ ์ฅ๋๋ค.
- ์ ๋ ฌ๋ costs๋ฅผ ๋ชจ๋ ํ์ํ ๋๊น์ง ๋ค์์ ๋ฐ๋ณตํ๋ค.
- ์ฐ๊ฒฐํ ๋ ๋ ธ๋์ parent๊ฐ ๋ค๋ฅด๋ค๋ฉด( ์ฐ๊ฒฐ ๊ฐ๋ฅ ์ํ )
- ๋ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๊ณ parent๋ฅผ set์ ์ ์ฅํ๋ค.
* Kruskal's Algorithm ์ฐธ๊ณ
์์ค์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int set[101]; // node์ parent๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด
int getParent(int node) {
if(set[node] == node) return node;
return set[node] = getParent(set[node]);
}
bool cmp(vector<int> a, vector<int> b) {
return a[2] < b[2];
}
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
for(int i = 0; i < n; i++)
set[i] = i;
sort(costs.begin(), costs.end(), cmp); // ๋น์ฉ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
for(int i = 0; i < costs.size(); i++) {
int start = getParent(costs[i][0]);
int end = getParent(costs[i][1]);
int cost = costs[i][2];
if(start != end) { // cycle์ด ๋ง๋ค์ด์ง์ง ์์ ๊ฒฝ์ฐ ๋ค๋ฆฌ๋ฅผ ์ถ๊ฐ
answer += cost;
set[end] = start;
}
}
return answer;
}
|
cs |
728x90
'Algorithm > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ์ง๊ฒ๋ค๋ฆฌ (0) | 2021.02.02 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ๋จ์์นด๋ฉ๋ผ (0) | 2021.02.01 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ๋ฒ ์คํธ์จ๋ฒ (0) | 2021.01.25 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ์์ฅ (0) | 2021.01.23 |
[ํ๋ก๊ทธ๋๋จธ์ค / C++] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2021.01.22 |