728x90
반응형
https://www.acmicpc.net/problem/4386
4386번: 별자리 만들기
도현이는 우주의 신이다. 이제 도현이는 아무렇게나 널브러져 있는 n개의 별들을 이어서 별자리를 하나 만들 것이다. 별자리의 조건은 다음과 같다. 별자리를 이루는 선은 서로 다른 두 별을 일
www.acmicpc.net
문제 해결
- 전형적인 유니온 파인드 문제
- 단 리스트 안에 두 별자리 간의 거리를 오름차순으로 정렬하고 연결 되어있는지 아닌지 유니온 파인드를 통해 확인하고 해결한다.
CODE
import sys
input = sys.stdin.readline
import math
def find(x):
if x != parents[x]:
return find(parents[x])
return parents[x]
def union_parent(x,y):
x = find(x)
y = find(y)
if x<y:
parents[y] = x
else:
parents[x] = y
if __name__=="__main__":
n = int(input())
parents = [i for i in range(n+1)]
stars = []
edges = []
result = 0
for _ in range(n):
x, y = map(float, input().split())
stars.append((x,y))
for i in range(n-1):
for j in range(i+1,n):
edges.append((math.sqrt((stars[i][0]-stars[j][0])**2 + (stars[i][1]-stars[j][1])**2), i, j))
edges.sort()
for edge in edges:
cost, x, y = edge
if find(x) != find(y):
union_parent(x,y)
result += cost
print(round(result,2))
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 14426 접두사 찾기 (0) | 2024.03.10 |
---|---|
[python] 백준 16724 피리 부는 사나이 (0) | 2024.03.08 |
[python] 백준 16566 카드 게임 (0) | 2024.03.05 |
[python] 백준 14939 불 끄기 (0) | 2024.03.02 |
[python] 백준 1647 도시 분할 계획 (0) | 2024.03.01 |
댓글