DonHurry

[Python] ๋ฐฑ์ค€ 4386๋ฒˆ - ๋ณ„์ž๋ฆฌ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

Problem Solving

[Python] ๋ฐฑ์ค€ 4386๋ฒˆ - ๋ณ„์ž๋ฆฌ ๋งŒ๋“ค๊ธฐ

_๋„๋… 2022. 11. 15. 01:43

๐Ÿ“– ๋ฌธ์ œ

 

4386๋ฒˆ: ๋ณ„์ž๋ฆฌ ๋งŒ๋“ค๊ธฐ

๋„ํ˜„์ด๋Š” ์šฐ์ฃผ์˜ ์‹ ์ด๋‹ค. ์ด์ œ ๋„ํ˜„์ด๋Š” ์•„๋ฌด๋ ‡๊ฒŒ๋‚˜ ๋„๋ธŒ๋Ÿฌ์ ธ ์žˆ๋Š” n๊ฐœ์˜ ๋ณ„๋“ค์„ ์ด์–ด์„œ ๋ณ„์ž๋ฆฌ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. ๋ณ„์ž๋ฆฌ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ณ„์ž๋ฆฌ๋ฅผ ์ด๋ฃจ๋Š” ์„ ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๋ณ„์„ ์ผ

www.acmicpc.net

 

๐Ÿ”Ž ํ’€์ด

์œ ๋‹ˆ์˜จ ํŒŒ์ธ๋“œ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ฐฑ์ค€ 1197๋ฒˆ ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋…ธ๋“œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ„์ ‘์ ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค๋Š” ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ณ„๋“ค์˜ 2์ฐจ์› ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

import sys
input = sys.stdin.readline

# root๋ฅผ ์ฐพ๋Š” ํ•จ์ˆ˜
def find_parents(x):
    if parents[x] == x:
        return x
    return find_parents(parents[x])

# root๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ํ•จ์ˆ˜
def union_parents(a, b):
    a = find_parents(a)
    b = find_parents(b)
    if a < b:
        parents[b] = a
    else:
        parents[a] = b

# ๋‘ ์  ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
def cal_dist(x1, y1, x2, y2):
    return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5


n = int(input())
parents = [int(x) for x in range(n)]
dist = []
stars = []

for _ in range(n):
    x, y = map(float, input().split())
    stars.append((x, y))

for i in range(n):
    for j in range(i+1, n):
        # ๋‘ ๋ณ„ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ
        k = cal_dist(stars[i][0], stars[i][1], stars[j][0], stars[j][1])
        # ๊ฑฐ๋ฆฌ, ์ถœ๋ฐœ ๋ณ„, ๋„์ฐฉ ๋ณ„
        dist.append((k, i, j))

# ์ตœ์†Œ ๊ฑฐ๋ฆฌ ์ˆœ์œผ๋กœ ๋‚˜์—ด
dist.sort()
ans = 0
for k, i, j in dist:
    # ๋‘ ๋ณ„์˜ root๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ๊ฑฐ๋ฆฌ๋น„์šฉ ์ถ”๊ฐ€ํ•˜๊ณ  root ํ•ฉ์น˜๊ธฐ
    if find_parents(i) != find_parents(j):
        union_parents(i, j)
        ans += k

print(ans)