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 |
Tags
- 인터페이스
- this
- 내부 클래스
- 17472
- 상속
- 캡슐화
- nextInt
- 객체 지향
- Scanner
- abstract
- 추상화
- 버퍼비우기
- 생성자
- 객체지향
- python
- Final
- polymorphism
- 추상 클래스
- 최소신장트리
- 열거형
- inheritance
- 프림알고리즘
- java
- 제네릭
- 백준
- 다형성
- enum
- 와일드카드
- Encapsulation
Archives
- Today
- Total
쫑쫑이의 블로그
백준 4386 별자리 만들기 Java [최소스패닝트리, 프림] 본문
https://www.acmicpc.net/problem/4386
최소 스패닝 트리 문제이다
아무 생각없이 프림을 사용해서 풀었는데 풀고보니 크루스칼으로 푸는게 좋아보인다
N x N 행렬을 만들고 피타고라스의 정의 a^2 + b^2 = c^2를 활용해 두 변 사이의 거리를 구해 넣어줬다
우선순위큐에서 거리를 기준으로 최소값을 꺼내 방문 하지 않은 노드들을 방문해가면서 결과값에 더해줬다
출력은 10^-2까지만 구하면 된다
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int cnt = N;
double result = 0;
StringTokenizer st;
double[][] stars = new double[N][2];
double[][] dist = new double[N][N];
boolean[] vtd = new boolean[N];
for (int n = 0; n < N; n++) {
st = new StringTokenizer(br.readLine());
stars[n][0] = Double.parseDouble(st.nextToken());
stars[n][1] = Double.parseDouble(st.nextToken());
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (i == j) continue;
double len = Math.sqrt(Math.pow(stars[i][0] - stars[j][0], 2)
+ Math.pow(stars[i][1] - stars[j][1], 2));
dist[i][j] = len;
dist[j][i] = len;
}
}
PriorityQueue<double[]> queue = new PriorityQueue<>((a,b) -> (int) (a[0] - b[0]));
queue.add(new double[]{0, 0});
while (!queue.isEmpty() && cnt > 0) {
double[] now = queue.poll();
int n = (int) now[1];
if (vtd[n]) continue;
vtd[n] = true;
cnt--;
result += now[0];
for (int i = 0; i < N; i++) {
if (vtd[i]) continue;
queue.add(new double[]{dist[n][i], i});
}
}
System.out.printf("%.2f", result);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 1987 알파벳 Java [DFS] (0) | 2022.11.12 |
---|---|
백준 2568 전깃줄 - 2 Java [LIS] (0) | 2022.11.11 |
백준 1766 문제집 Java [위상정렬, 우선순위 큐] (0) | 2022.11.08 |
백준 1005 ACM Craft Java [위상정렬] (0) | 2022.11.07 |
백준 2623 음악프로그램 Java [위상정렬] (0) | 2022.11.06 |