본문 바로가기

알고리즘/프로그래머스

[프로그래머스] 섬 연결하기 / JAVA

문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42861

 

코딩테스트 연습 - 섬 연결하기

4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4

programmers.co.kr

 

import java.util.*;
class Solution {
    public static int par[];
    public static int find(int x){
        if(par[x] == x) return x;
        return par[x] = find(par[x]);
    }
    public static void union(int a,int b){
        int x = find(a);
        int y = find(b);
        if(x!=y){
            par[y] = x;
        }
    }
    public static int solution(int n, int[][] costs) {
        int answer = 0;
        par = new int[n];
        for(int i=0;i<n;i++){
            par[i] = i;
        }
        Arrays.sort(costs, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[2] - o2[2];
            }
        });
        int cnt = 0;
        for(int i=0;i<costs.length;i++){
            int a = costs[i][0];
            int b = costs[i][1];
            if(find(a)!=find(b)){
                union(a,b);
                answer+=costs[i][2];
                cnt++;
                if(cnt==n-1) return answer;
            }
        }

        return answer;
    }
}