일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #외벽점검 #programmers #C++
- #알고리즘 #백준 #4386 #백준4386 #algorithm #baekjoon #baekjoon4386 #C++
- #알고리즘 #백준 #2616 #백준2616 #algorithm #baekjoon #baekjoon2616 #Java
- #알고리즘 #백준 #2573 #백준2573 #algorithm #baekjoon #baekjoon2573 #C++
- #알고리즘 #백준 #2352 #백준2352 #algorithm #baekjoon #baekjoon2352 #C++
- #알고리즘 #백준 #5214 #백준5214 #algorithm #baekjoon #baekjoon5214 #C++
- 스레드 #동시성 #thread #process #
- #알고리즘 #백준 #1525 #백준1525 #algorithm #baekjoon #baekjoon1525 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #블록이동하기 #programmers #C++
- #알고리즘 #백준 #17472 #백준17472 #algorithm #baekjoon #baekjoon17472 #C++
- 책리뷰
- #알고리즘 #백준 #17136 #백준17136 #algorithm #baekjoon #baekjoon17136 #C++
- #알고리즘 #백준 #1793 #백준1793 #algorithm #baekjoon #baekjoon1793 #C++
- #알고리즘 #백준 #3190 #백준3190 #algorithm #baekjoon #baekjoon3190 #C++
- #알고리즘 #백준 #15683 #백준15683 #algorithm #baekjoon #baekjoon15683 #C++
- #알고리즘 #백준 #1987 #백준1987 #algorithm #baekjoon #baekjoon1987 #Java
- #알고리즘 #백준 #2580 #백준2580 #algorithm #baekjoon #baekjoon2580 #Java
- #알고리즘 #백준 #17140 #백준17140 #algorithm #baekjoon #baekjoon17140 #C++
- 개발자취미
- CleanCode
- #알고리즘 #백준 #1260 #백준1260 #algorithm #baekjoon #baekjoon1260 #Java
- 개발서
- #알고리즘 #백준 #17406 #백준17406 #algorithm #baekjoon #baekjoon17406 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #괄호변환 #programmers #C++
- #알고리즘 #백준 #14888 #백준14888 #algorithm #baekjoon #baekjoon14888 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #문자열압축 #programmers #C++
- #알고리즘 #백준 #15684 #백준15684 #algorithm #baekjoon #baekjoon15684 #C++
- #알고리즘 #백준 #17837 #백준17837 #algorithm #baekjoon #baekjoon17837 #C++
- 클린코드
- #알고리즘 #백준 #12094 #백준12094 #algorithm #baekjoon #baekjoon12094 #C++
Archives
- Today
- Total
개발자 일기장.
백준 4386. 별자리 만들기 본문
별자리 만들기
Problem?
문제.
Solution
최소 스패닝 트리를 만들기.
loop를 돌면서 최소 스패닝 트리를 완성했다. (N이 100이하 이므로)
크루스칼(kruskal Algorithm)을 사용했다.
가정 getLength() : 길이 구하기 simpleFind() : 부모 찾기 simpleUnion() : 노드 이어주기
g_size : 해당 전체 노드 개수 xpos, ypos : input graph : graph parent : 부모 노드 유지 |
Code
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
#define MAX 10201
int N, g_size;
float answer = 0;
int parent[MAX];
vector<pair<float, pair<int, int>>> graph;
float xpos[101], ypos[101];
float getLength(int a, int b) {
return sqrt(pow(xpos[a] - xpos[b], 2) + pow(ypos[a] - ypos[b], 2));
}
int simpleFind(int x) {
if (parent[x] == x)
return x;
else
return parent[x] = simpleFind(parent[x]);
}
void simpleUnion(int x, int y) {
int x_parent = simpleFind(x);
int y_parent = simpleFind(y);
if (x_parent != y_parent)
parent[x_parent] = y_parent;
}
int main() {
// input
cin >> N;
g_size = N * (N + 1) / 2;
for (int i = 1; i <= N; i++) {
scanf("%f %f", &xpos[i], &ypos[i]);
}
// solution
for(int i = 1; i <= N; i++){
for (int j = i + 1; j <= N; j++) {
graph.push_back({ getLength(i, j), {i, j} });
}
}
sort(graph.begin(), graph.end());
for (int i = 0; i < g_size; i++)
parent[i] = i;
for (int i = 0; i < graph.size(); i++) {
if (simpleFind(graph[i].second.first) != simpleFind(graph[i].second.second)) {
simpleUnion(graph[i].second.first, graph[i].second.second);
answer += graph[i].first;
}
}
// output
printf("%.2f\n", answer);
return 0;
}
크루스칼 알고리즘을 이용한 최소 스패닝 트리 문제.
'취업 > Algorithm.' 카테고리의 다른 글
백준 17136. 색종이 붙이기 (0) | 2020.03.22 |
---|---|
백준 1525. 퍼즐 (0) | 2020.03.22 |
백준 1647. 도시 분할 계획 (0) | 2020.03.16 |
백준 1197. 최소 스패닝 트리 (0) | 2020.03.07 |
백준 9252. LCS 2 (0) | 2020.03.06 |