๋šœ๋ถ€๋‹ˆ์˜ Devlog

[Programmers] ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ (Java)

by ๋šœ๋ถ€๋‹ˆ

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

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

programmers.co.kr

 

์ด ๋ฌธ์ œ๋Š” ๋ชจ๋“  ์„ฌ์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

Greedy์™€ Union Find๋ฅผ ์ ์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ธ๋ฐ, Union Find ๋ฌธ์ œ๋Š” ์™œ ๋งค๋ฒˆ ํ’€์ด๊ฐ€ ๋ฐ”๋กœ ์ƒ๊ฐ์ด ์•ˆ ๋‚ ๊นŒ์š”...? ๐Ÿ˜‚๐Ÿ˜‚

์•„๋ฌดํŠผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ์ ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ๋ฉ๋‹ˆ๋‹ค! ๐Ÿ˜Ž๐Ÿ˜Ž

1. ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ

2. Union Find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ๋ชจ๋“  ์„ฌ ์—ฐ๊ฒฐ (์ด๋ฏธ ์—ฐ๊ฒฐ๋œ ์„ฌ์€ ๋„˜์–ด๊ฐ!)

 

import java.util.*;


class Solution {
    // ๋ถ€๋ชจ ์ฐพ๊ธฐ
    public static int find(int[] parent, int x) {
        if(parent[x] == x) return x;
        return parent[x] = find(parent, parent[x]);
    }

    public int solution(int n, int[][] costs) {
        int answer = 0;
        int costsLen = costs.length;
        int[] parent = new int[n]; // ๋ถ€๋ชจ ๋…ธ๋“œ์— ๋Œ€ํ•ด ๊ธฐ๋ก
        
        // ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        Arrays.sort(costs, (int[] c1, int[] c2) -> c1[2] - c2[2]);
        
        // ์ดˆ๊ธฐ์— ๋ถ€๋ชจ๋Š” ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ์„ค์ •
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
        
        // Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‘์šฉํ•ด ๋ถ€๋ชจ ์ฐพ๊ธฐ
        for (int i = 0; i < costsLen; i++) {
            int first = find(parent, costs[i][0]);
            int second = find(parent, costs[i][1]);
            if (first != second) { // ๋‘ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์ง€ ์•Š์€ ๊ฒฝ์šฐ => ์—ฐ๊ฒฐ์ด ์•ˆ๋œ ์ƒํƒœ
                answer += costs[i][2];
                parent[second] = first; // ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ชจ์ด๋ฏ€๋กœ ํ•ฉ์ณ์คŒ
            }
        }
        
        return answer;
    }
}

 

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

๋šœ๋ถ€๋‹ˆ์˜ Devlog

๋šœ๋ถ€๋‹ˆ

ํ™œ๋™ํ•˜๊ธฐ