250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- deque
- List
- javascript
- 리소스모니터링
- spring boot
- string
- Properties
- JPA
- 스택
- BFS
- Java
- date
- Union-find
- 큐
- alter
- CSS
- dfs
- 힙덤프
- html
- map
- Calendar
- priority_queue
- NIO
- scanner
- set
- math
- sql
- union_find
- 스프링부트
- GC로그수집
Archives
- Today
- Total
매일 조금씩
[C++] 프로그래머스 : 섬 연결하기 본문
728x90
반응형
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(vector<int> node1, vector<int> node2){
return node1[2] < node2[2];
}
int getParent(vector<int>& parent, int node){
if(parent[node] == node)
return node;
return parent[node] = getParent(parent, parent[node]);
}
void unionParent(vector<int>& parent, int node1, int node2){
int parent1 = getParent(parent, node1);
int parent2 = getParent(parent, node2);
if(parent1 < parent2){
parent[parent2] = parent1;
}else{
parent[parent1] = parent2;
}
}
int find(vector<int>& parent, int node1, int node2){
int parent1 = getParent(parent, node1);
int parent2 = getParent(parent, node2);
if(parent1 == parent2)
return 1;
else
return 0;
}
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
int size = 0;
sort(costs.begin(), costs.end(), cmp);
// 부모노드를 담을 벡터
// 값을 변화시켜 줘야하기 때문에
// 함수 인자로 전달시 & 사용해서 참조로 전달
vector<int> parent;
for(auto line: costs){
if(size < line[1])
size = line[1];
}
for(int i = 0; i <= size; i++){
parent.push_back(i);
}
for(auto line: costs){
if(!find(parent, line[0], line[1])){
answer += line[2];
unionParent(parent, line[0], line[1]);
}
}
return answer;
}
728x90
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
백준 1946번 : 신입사원 c++ (0) | 2021.06.02 |
---|---|
[C++] 프로그래머스 : 단속 카메라 (0) | 2021.02.02 |
[C++] 프로그래머스 : 구명보트 (0) | 2021.02.02 |
[C++] 프로그래머스 : 큰 수 만들기 (0) | 2021.02.02 |
[C++] 프로그래머스 : 조이스틱 (0) | 2021.02.02 |