코테/코드트리

[코드트리/NOVICE HIGH] MST 찾기 (JAVA)

imname1am 2023. 9. 27. 16:46
반응형

🔺 문제

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.util.*;
import java.io.*;
 
public class Main {
    static int[] parent = {0,1,2,3,4,5,6,7};
    static PriorityQueue<Node> pq;
    
    public static void main(String[] args) throws IOException {
        pq = new PriorityQueue<>();
        
        pq.add(new Node(1219));
        pq.add(new Node(1313));
        pq.add(new Node(1514));
        pq.add(new Node(1430));
        pq.add(new Node(1754));
        
        pq.add(new Node(2312));
        pq.add(new Node(2629));
        
        pq.add(new Node(3523));
        pq.add(new Node(3617));
        
        pq.add(new Node(4728));
        pq.add(new Node(5776));
        pq.add(new Node(6749));
 
        
        // MST 수행
        int useEdge = 0;
        int result = 0;
        
        while(useEdge < 6) {
            Node now = pq.poll();
            
            if(find(now.s) != find(now.e)) { // 간선 이룬 두 노드가 다른 경우에만
                union(now.s, now.e); // 둘이 같은 노드 갖도록 함
                result += now.v;
                useEdge++;
            }
        }
        
        System.out.println(result);
    }
    
    // 유니온 파인드
    static void union(int a, int b) {
        a = find(a);
        b = find(b);
        
        if(a != b) parent[b] = a;
    }
    
    static int find(int a) {
        if(a == parent[a])  return a;
        return parent[a] = find(parent[a]); // 경로 압축
    }
    
}
 
class Node implements Comparable<Node> {
    int s, e, v;
    
    public Node(int s, int e, int v) {
        this.s = s; this.e = e; this.v = v;
    }
    
    // 가중치 오름차순 정렬
    @Override
    public int compareTo(Node node) {
        return this.v - node.v;
    }
}
cs

 


💬 느낀 점

크루스칼 오랜만에 보니 다 잊음.... 복습하자 복습

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

최소 신장 트리 (MST)

📍 정의 및 특징 모든 정점들을 연결하는 부분 그래프 중에서 그 가중치의 합이 최소인 트리 - 사이클 X - 에지 중심! - 노드가 N개일 때, MST를 구성하는 에지 개수는 항상 N-1개 - 대표 : 크루스칼(

bono039.tistory.com

 

반응형