본문 바로가기
프로그래머스

섬 연결하기 C++

by paysmile 2022. 3. 25.

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

#include <string>
#include <vector>
#include <algorithm>

using namespace std;
int parent[101];
vector<pair<pair<int, int>, int>> v;
int N;

bool cmp(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
	if (a.second < b.second) return true;
	else return false;
}

int FindParent(int ii) {
	if (parent[ii] == ii) return ii;
	else return FindParent(parent[ii]);
}

void UnionParent(int ii, int jj) {
	int pi = FindParent(ii);
	int pj = FindParent(jj);
	if (pi > pj) {
		parent[pj] = pi;
	}
	else
		parent[pi] = pj;
}

int solution(int n, vector<vector<int>> costs) {
	int answer = 0;
	N = n;

	for (int i = 0; i < n; i++) {
		parent[i] = i;
	}

	for (int i = 0; i < costs.size(); i++) {
		v.push_back({ { costs[i][0],costs[i][1] }, costs[i][2] });
	}

	sort(v.begin(), v.end(),cmp);

	for (int i = 0; i < v.size(); i++) {
		int start = v[i].first.first;
		int end = v[i].first.second;
		int c = v[i].second;

		if (FindParent(start) == FindParent(end)) continue;

		answer += c;
		UnionParent(start, end);
	}

	return answer;
}

'프로그래머스' 카테고리의 다른 글

자동완성 C++  (0) 2022.03.25
단속카메라 C++  (0) 2022.03.25
순위 C++  (0) 2022.03.24
기지국 설치 C++  (0) 2022.03.24
사칙연산 C++  (0) 2022.03.22