[백준] 1774번 우주신과의 교감 - 파이썬(Python)

2022. 2. 16. 09:33· 알고리즘/문제풀이
목차
  1. 나의 풀이
  2. 풀이법 및 코드설명
728x90

문제 (링크)

 

https://www.acmicpc.net/problem/1774

 

1774번: 우주신과의 교감

(1,1) (3,1) (2,3) (4,3) 이렇게 우주신들과 황선자씨의 좌표가 주어졌고 1번하고 4번이 연결되어 있다. 그렇다면 1번하고 2번을 잇는 통로를 만들고 3번하고 4번을 잇는 통로를 만들면 신들과 선자씨끼

www.acmicpc.net

 

나의 풀이

import sys
input = sys.stdin.readline

def get_dist(loc1, loc2):
    x1, y1, x2, y2 = loc1[0], loc1[1], loc2[0], loc2[1]
    return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5


def find(parent, x):
    if x != parent[x]:
        parent[x] = find(parent, parent[x])

    return parent[x]


def union(parent, a, b):
    a = find(parent, a)
    b = find(parent, b)

    if a < b:
        parent[b] = a
    
    else:
        parent[a] = b


N, M = map(int, input().split())
parent = list(range(N+1))

edges = [0] * (N+1)
for i in range(1, N+1):
    edges[i] = list(map(int, input().split()))


for _ in range(M):
    a, b = map(int, input().split())
    union(parent, a, b)


possible = []
for i in range(1, len(edges)-1):
    for j in range(i+1, len(edges)):
        possible.append([get_dist(edges[i], edges[j]), i, j])


possible.sort()
ans = 0

for p in possible:
    cost, x, y = p[0], p[1], p[2]

    if find(parent, x) != find(parent, y):
        union(parent, x, y)
        ans += cost
    
print("{:.2f}".format(ans))

# step
# M개를 먼저 연결 (Union)
# 만들 수 있는 연결들을 dist와 함께 저장
# Kruskal

 

풀이법 및 코드설명

크루스칼 알고리즘을 통해 해결할 수 있는 문제이다.

 

이미 연결된 M개의 통로를 먼저 Union해주고, 모든 노드들에 대하여 연결 가능한 조합을 해당 조합의 거리와 함께 possible 리스트에 담아준다.

 

이를 거리를 기준으로 오름차순 정리해주고, 크루스칼 알고리즘을 사용해 연결해주며, 새로 연결되는 선분의 거리를 ans에 더해준다.

저작자표시 (새창열림)

'알고리즘 > 문제풀이' 카테고리의 다른 글

[백준] 1043번 거짓말 - 파이썬(Python)  (1) 2022.02.15
[백준] 2437번 저울 - 파이썬(Python)  (2) 2022.01.20
[백준] 2493번 탑 - 파이썬(Python)  (0) 2021.11.23
[백준] 19237번 어른 상어 - 파이썬(Python)  (0) 2021.11.15
[백준] 1766번 문제집 - 파이썬(Python)  (0) 2021.11.11
  1. 나의 풀이
  2. 풀이법 및 코드설명
'알고리즘/문제풀이' 카테고리의 다른 글
  • [백준] 1043번 거짓말 - 파이썬(Python)
  • [백준] 2437번 저울 - 파이썬(Python)
  • [백준] 2493번 탑 - 파이썬(Python)
  • [백준] 19237번 어른 상어 - 파이썬(Python)
SeongOnion
SeongOnion
서버는 꺼지지 않아요
SeongOnion
조무래기 코딩
SeongOnion
전체
오늘
어제
  • 분류 전체보기 (167)
    • 알고리즘 (81)
      • 이론 (8)
      • 문제풀이 (73)
    • 언어 (15)
      • Python (9)
      • JavaScript (1)
      • JAVA (5)
    • 데이터베이스 (5)
    • 프레임워크 (15)
      • Django (7)
      • Spring (8)
    • 그 외 공부 (38)
      • 운영체제 (1)
      • 자료구조 (14)
      • 네트워크 (5)
      • CS (2)
      • 기타 (7)
      • 트러블 슈팅 (9)
    • 프로젝트 (0)
    • 개발자취 (8)
    • 회고 (3)
    • 주저리주저리 (1)
    • 기타 (비개발) (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 큐
  • 컨트리뷰트
  • 정렬 알고리즘
  • 자바
  • BFS/DFS
  • 오픈소스
  • 장고
  • 데이터베이스
  • spring
  • 회고
  • 트러블 슈팅
  • BFS
  • Django
  • 백준
  • 개발자
  • 투 포인터 알고리즘
  • 프로그래머스
  • DP
  • DRF
  • 에라토스테네스의 체
  • 웹
  • 코딩
  • 스택
  • 파이썬
  • 그리디알고리즘
  • 코딩테스트
  • 알고리즘
  • 브루트포스
  • 이진탐색
  • 소수

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeongOnion
[백준] 1774번 우주신과의 교감 - 파이썬(Python)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.