Skip to content

Commit eae7f24

Browse files
committed
[Gold III] Title: 별자리 만들기, Time: 8 ms, Memory: 79516 KB -BaekjoonHub
1 parent 80fcf5a commit eae7f24

2 files changed

Lines changed: 83 additions & 0 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# [Gold III] 별자리 만들기 - 4386
2+
3+
[문제 링크](https://www.acmicpc.net/problem/4386)
4+
5+
### 성능 요약
6+
7+
메모리: 79516 KB, 시간: 8 ms
8+
9+
### 분류
10+
11+
그래프 이론, 최소 스패닝 트리
12+
13+
### 제출 일자
14+
15+
2026년 3월 1일 16:28:11
16+
17+
### 문제 설명
18+
19+
<p>도현이는 우주의 신이다. 이제 도현이는 아무렇게나 널브러져 있는 n개의 별들을 이어서 별자리를 하나 만들 것이다. 별자리의 조건은 다음과 같다.</p>
20+
21+
<ul>
22+
<li>별자리를 이루는 선은 서로 다른 두 별을 일직선으로 이은 형태이다.</li>
23+
<li>모든 별들은 별자리 위의 선을 통해 서로 직/간접적으로 이어져 있어야 한다.</li>
24+
</ul>
25+
26+
<p>별들이 2차원 평면 위에 놓여 있다. 선을 하나 이을 때마다 두 별 사이의 거리만큼의 비용이 든다고 할 때, 별자리를 만드는 최소 비용을 구하시오.</p>
27+
28+
### 입력
29+
30+
<p>첫째 줄에 별의 개수 n이 주어진다. (1 ≤ n ≤ 100)</p>
31+
32+
<p>둘째 줄부터 n개의 줄에 걸쳐 각 별의 x, y좌표가 실수 형태로 주어지며, 최대 소수점 둘째자리까지 주어진다. 좌표는 1000을 넘지 않는 양의 실수이다.</p>
33+
34+
### 출력
35+
36+
<p>첫째 줄에 정답을 출력한다. 절대/상대 오차는 10<sup>-2</sup>까지 허용한다.</p>
37+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import Foundation
2+
3+
let n = Int(readLine()!)!
4+
var stars = [(Double, Double)]()
5+
6+
for _ in 0..<n {
7+
let input = readLine()!.split(separator: " ").map { Double($0)! }
8+
stars.append((input[0], input[1]))
9+
}
10+
11+
if n == 1 {
12+
print("0.00")
13+
exit(0)
14+
}
15+
16+
var visited = [Bool](repeating: false, count: n)
17+
var minDist = [Double](repeating: Double.greatestFiniteMagnitude, count: n)
18+
19+
minDist[0] = 0
20+
var result = 0.0
21+
22+
for _ in 0..<n {
23+
var u = -1
24+
var minValue = Double.greatestFiniteMagnitude
25+
26+
for i in 0..<n {
27+
if !visited[i] && minDist[i] < minValue {
28+
minValue = minDist[i]
29+
u = i
30+
}
31+
}
32+
33+
visited[u] = true
34+
result += minValue
35+
36+
for v in 0..<n {
37+
if !visited[v] {
38+
let dx = stars[u].0 - stars[v].0
39+
let dy = stars[u].1 - stars[v].1
40+
let dist = sqrt(dx * dx + dy * dy)
41+
minDist[v] = min(minDist[v], dist)
42+
}
43+
}
44+
}
45+
46+
print(String(format: "%.2f", result))

0 commit comments

Comments
 (0)