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
후기
1. 유니온 파인드, 크루스칼 처음 써봤는데 진짜 개꿀인거같다. 더 연습해야징
풀이
1. 유니온 파인드 함수들 미리 만들어 둔다
1) getParent
: 재귀함수로 루트 찾기, 루트는 젤 작은 숫자로 할거임
2) connect
: 부모를 통일시키면 사실상 연결된거
: 아까 위에서 말했듯이 작은 숫자가 루트니까 둘중 더 작은 부모로 통일 시킴
2. 미리 가격 싼순으로 sort 해둔다!
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int parent[101];
bool cmp(vector<int> a, vector<int> b)
{
return a[2] < b[2];
}
int getParent(int x)
{
if(parent[x]==x)
return x;
return parent[x]= getParent(parent[x]);
}
void connect(int x, int y)
{
x = getParent(x);
y = getParent(y);
if(x<y)
parent[y]=x;
else
parent[x]=y;
}
bool find(int a, int b) {
a = getParent(a);
b = getParent(b);
return a == b;
}
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
for(int i=0;i<n;i++)
parent[i]=i;
sort(costs.begin(),costs.end(),cmp);
for(int i=0;i<costs.size();i++)
{
if(!find(costs[i][0],costs[i][1]))//연결이 안되있는 상태면
{
connect(costs[i][0],costs[i][1]);
answer += costs[i][2];
}
}
return answer;
}
'c++ > 프로그래머스' 카테고리의 다른 글
프로그래머스 : 네트워크 C++ (유니온 파인드 연습) (0) | 2020.10.30 |
---|---|
프로그래머스 : 단속카메라 C++ (0) | 2020.10.30 |
프로그래머스 : 디스크 컨트롤러 c++ (0) | 2020.10.29 |
프로그래머스 : 더 맵게 c++ (0) | 2020.10.28 |
프로그래머스 : 프린터 c++ (0) | 2020.10.27 |