[Programmers][Python]島への接続



https://programmers.co.kr/learn/courses/30/lessons/42861

📌に答える


私が書いた解答(成功)


利用
  • kruskalアルゴリズム
  • costs低コストでソート
  • 親ノードのリストを格納parent使用
  • find:該当ノードのルートノードの関数を検索(回収)
  • union:2つのノードのルートノードを特定し、その他の場合は1つの関数にまとめる
  • def solution(n, costs):
        answer = 0
        parent = [i for i in range(n)] # 부모 노드를 설정하기 위한 리스트
        costs.sort(key=lambda x:x[2]) # cost가 작은 값 기준으로 정렬
    
        def find(a): # 루트 노드를 찾는 함수
            if parent[a] == a: # 본인이 루트 노드인 경우
                return a
            parent[a] = find(parent[a])
            return parent[a] # 루트노드를 찾아 저장하고 리턴
    
        def union(a, b): # Tree 두개를 합치는 과정
            pa, pb = find(a), find(b) # 각 노드의 루트 노드
            if pa == pb : # 루트 노드가 같다는 것은 같은 트리
                return
            elif pa < pb : # 노드값이 더 낮은 트리쪽으로 합침
                parent[pb] = pa
            else :
                parent[pa] = pb
            return   
    
        for n1, n2, c in costs:
            if find(n1) != find(n2): # 루트 노드가 다르면 연결 후 경로 값 추가
                union(n1, n2)
                answer += c
    
        return answer

    📌ポスト


    kruskalアルゴリズムとは何かを学んだことがありますが、長い間、使い方を忘れてしまいました.この問題を通じて、私は再び理解して、私はkruskalアルゴリズムの関連内容を整理すべきだと思います!