프로그래머스 [섬 연결하기]
문제보기
 
소스코드
import java.util.Arrays;
import java.util.Comparator;
class Solution {
    public int solution(int n, int[][] costs) {
        Arrays.sort(costs, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return Integer.compare(o1[2], o2[2]);
            }
        });
        return findBestBridge(n, costs);
    }
    private int findBestBridge(int n, int[][] costs) {
        int[] parent = new int[n];
        Arrays.setAll(parent, i -> i);
        int bridgCnt = 0;
        int totalCost = 0;
        for (int i = 0; i < costs.length; i++) {
            int island1 = costs[i][0];
            int island2 = costs[i][1];
            int cost = costs[i][2];
            int island1Parent = findParent(island1, parent);
            int island2Parent = findParent(island2, parent);
            if (island1Parent!=island2Parent) {
                parent[island2Parent] = island1Parent;
                totalCost += cost;
                bridgCnt++;
            }
            if (bridgCnt == n - 1) break;
        }
        return totalCost;
    }
    private static int findParent(int no, int[] parent) {
        if (parent[no] == no) {
            return no;
        }
        return parent[no] = findParent(parent[no], parent);
    }
}