본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 4386 별자리 만들기

by Alan_Kim 2024. 3. 7.
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
반응형

댓글