File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+
Original file line number Diff line number Diff line change 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) )
You can’t perform that action at this time.
0 commit comments