ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ณ ๋“์  kit ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ
    Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ/Programmers 2020. 7. 18. 12:55

    ๐Ÿ“š ๋ฌธ์ œ ์„ค๋ช…

    n๊ฐœ์˜ ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•˜๋Š” ๋น„์šฉ(costs)์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œ์˜ ๋น„์šฉ์œผ๋กœ ๋ชจ๋“  ์„ฌ์ด ์„œ๋กœ ํ†ตํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ return ํ•˜๋„๋ก solution์„ ์™„์„ฑํ•˜์„ธ์š”.

    ๋‹ค๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฑด๋„ˆ๋”๋ผ๋„, ๋„๋‹ฌํ•  ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด ํ†ตํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A ์„ฌ๊ณผ B ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๊ณ , B ์„ฌ๊ณผ C ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด A ์„ฌ๊ณผ C ์„ฌ์€ ์„œ๋กœ ํ†ตํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

     

    ์ œํ•œ์‚ฌํ•ญ

    • ์„ฌ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

    • costs์˜ ๊ธธ์ด๋Š” ((n-1) * n) / 2์ดํ•˜์ž…๋‹ˆ๋‹ค.

    • ์ž„์˜์˜ i์— ๋Œ€ํ•ด, costs[i][0] ์™€ costs[i] [1]์—๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” ๋‘ ์„ฌ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด์žˆ๊ณ , costs[i] [2]์—๋Š” ์ด ๋‘ ์„ฌ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•  ๋•Œ ๋“œ๋Š” ๋น„์šฉ์ž…๋‹ˆ๋‹ค.

    • ๊ฐ™์€ ์—ฐ๊ฒฐ์€ ๋‘ ๋ฒˆ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„ ๊ฐ™์€ ์—ฐ๊ฒฐ๋กœ ๋ด…๋‹ˆ๋‹ค. ์ฆ‰ 0๊ณผ 1 ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๊ณผ 0์˜ ๋น„์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ๋ชจ๋“  ์„ฌ ์‚ฌ์ด์˜ ๋‹ค๋ฆฌ ๊ฑด์„ค ๋น„์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋‘ ์„ฌ ์‚ฌ์ด์˜ ๊ฑด์„ค์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค.

    • ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์„ฌ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ๐ŸŽฏ ์–ด๋–ป๊ฒŒ ํ’€์—ˆ๋‚˜

    ์ฒซ๋ฒˆ์งธ ์‹œ๋„ (20์  / 100์ )

    import java.util.Arrays;
    
    class Solution {
        public int solution(int n, int[][] costs) {
            int minCost = 0;
            int nReachable = 0;
            boolean[] reachableStatus = new boolean[n]; // default : false
            
            Arrays.sort(costs, (c1, c2) -> Integer.compare(c1[2], c2[2]));
            
            for(int i = 0; i < costs.length; i++) {
                if(nReachable == n) break;
                
                int island1 = costs[i][0];
                int island2 = costs[i][1];
                int cost = costs[i][2];
                
                if(!reachableStatus[island1] && !reachableStatus[island2]) { // island1๊ณผ island2 ๋ชจ๋‘ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
                    minCost += cost;
                    reachableStatus[island1] = true;
                    reachableStatus[island2] = true;
                    nReachable += 2;
                }
                
                if(!reachableStatus[island1]) { //island1์ด ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
                    minCost += cost;
                    reachableStatus[island1] = true;
                    nReachable++;
                }
                
                if(!reachableStatus[island2]) { //island2๊ฐ€ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
                    minCost += cost;
                    reachableStatus[island2] = true;
                    nReachable++;
                }                               
            }
            
            return minCost;
        }
    }

     

    ๋‘๋ฒˆ์งธ ์‹œ๋„ (32.5์  / 100์ )

    import java.util.Arrays;
    
    class Solution {
        public int solution(int n, int[][] costs) {
            int minCost = 0;
            int nSeparated = n;
            boolean[] reachableStatus = new boolean[n]; // default : false
            
            // cost๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
            Arrays.sort(costs, (c1, c2) -> Integer.compare(c1[2], c2[2]));
            
          
            
            for(int i = 0; i < costs.length; i++) {
                if(nSeparated == 1) break; // ๋ชจ๋“  ์„ฌ์ด ํ•˜๋‚˜๊ฐ€ ๋˜๋ฉด ํƒˆ์ถœ
                
                int island1 = costs[i][0];
                int island2 = costs[i][1];
                int cost = costs[i][2];
               
                
                if(reachableStatus[island1] && reachableStatus[island2] && nSeparated > 1) { // ๋‘ ์„ฌ ๋ชจ๋‘ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์„ ๋•Œ 
                    minCost += cost;
                    nSeparated--;
                    continue;
                } 
                
                if(!reachableStatus[island1] && !reachableStatus[island2]) { // ๋‘ ์„ฌ ๋ชจ๋‘ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
                    minCost += cost;
                    reachableStatus[island1] = true;
                    reachableStatus[island2] = true;
                    nSeparated--;
                    continue;
                }
                
                if(!reachableStatus[island1]) { //island1์ด ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
                    minCost += cost;
                    reachableStatus[island1] = true;
                    nSeparated--;
                    continue;
                }
                
                if(!reachableStatus[island2]) { //island2๊ฐ€ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
                    minCost += cost;
                    reachableStatus[island2] = true;
                    nSeparated--;
                    continue;
                }            
            }
            
            return minCost;
        }
    }

     

    ์ตœ์ข… ์ฝ”๋“œ

    import java.util.Arrays;
    import java.util.HashMap;
    
    class Solution {
        public int solution(int n, int[][] costs) {
            int answer = 0;
            HashMap<Integer, Integer> graph = new HashMap<>();
            
            // init graph
            for(int i = 0;i < n; i++) graph.put(i, i);
            
            // cost๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
            Arrays.sort(costs, (o1, o2) -> Integer.compare(o1[2], o2[2]));
            
            for(int i = 0; i < costs.length; i++) {
                int start = getparent(graph, costs[i][0]);
                int end = getparent(graph, costs[i][1]);
                
                if(start != end) {
                    answer += costs[i][2];
                    graph.put(start, end);
                }
            }
            
            return answer;
        }
        
        public int getparent(HashMap<Integer, Integer> graph, int child) {
            if(graph.get(child) != child) {
                return getparent(graph, graph.get(child));    
            }
            
            return child;
        }
    }

     

    ๐Ÿง ์™œ ์ €๋ ‡๊ฒŒ ํ’€์—ˆ๋‚˜

    ์ฒซ๋ฒˆ์งธ ์‹œ๋„ (20์ / 100์ )

    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„์— ๊ต์ˆ˜๋‹˜๊ป˜์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€๋ฅด์ณ ์ฃผ์‹œ๋ฉฐ ๊ฐ•์กฐํ•˜์‹  ๋ง์”€์ด ์žˆ๋‹ค.

     

    "๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณธ์งˆ์€ ํ˜„์žฌ ์‹œ์ ์—์„œ์˜ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค."

     

    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋“ค์„ ํ’€๋ฉด์„œ ๊ต์ˆ˜๋‹˜์˜ ๋ง์”€์„ ๋˜๋‡Œ์ด๋‹ค๋ณด๋‹ˆ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ๊นจ๋‹ฌ์•˜๋‹ค.

    ๋จผ์ € ์‹œ์ ์ด๋‚˜ ๋‹จ๊ณ„๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ๋Š”๊ฐ€๋ฅผ ๋”ฐ์ ธ๋ด์•ผ ํ•œ๋‹ค. ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ๋ฐœ๊ฒฌํ•ด์•ผ ํ•œ๋‹ค.

    ๋‹ค์Œ์œผ๋กœ๋Š” ๋ฌด์—‡์ด ์ตœ์„ ์˜ ์„ ํƒ์ธ์ง€ ๋ฐœ๊ฒฌํ•ด์•ผ ํ•œ๋‹ค.

     

    ๋ฌธ์ œ๋ฅผ ์ฝ์–ด๋ณด๋‹ˆ ๋ฌธ์ œ ์ž์ฒด์—์„œ๋Š” ์‹œ์ ์ด๋‚˜ ๋‹จ๊ณ„๋ผ๊ณ  ๋ถ€๋ฅผ๋งŒํ•œ ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์„ฌ์„ ๋ชจ๋‘ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“œ๋Š” ์ตœ์†Œํ•œ์˜ ๋‹ค๋ฆฌ ๊ฑด์„ค ๋น„์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ž‘์€ ๋น„์šฉ๋ถ€ํ„ฐ ํ™•์ธํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

     

    ๋‹ค์Œ์œผ๋กœ ์ตœ์„ ์˜ ์„ ํƒ์ด ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋ชจ๋“  ์„ฌ์„ ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋น„์šฉ์„ ๋”ํ•ด์ฃผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

     

    ํ•˜์ง€๋งŒ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ฌ์ด ๋‘ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋‰˜๋Š” ๊ฒฝ์šฐ ๋™๊ทธ๋ผ๋ฏธ๋กœ ํ‘œ์‹œํ•œ ๋ถ€๋ถ„์„ ํ™•์ธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์ด ํ•„์š”ํ–ˆ๋‹ค.

     

    ๋‘๋ฒˆ์งธ ์‹œ๋„ (32.5์ / 100์ )

    ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๋˜ ์ค‘ '๋‘ ์„ฌ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๋ฉด ํ•˜๋‚˜์˜ ์„ฌ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋ฉด ๋˜์ง€ ์•Š๋‚˜?' ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ถ„๋ฆฌ๋œ ์„ฌ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ณ€์ˆ˜๋กœ ๋‘๊ณ  ๊ทธ๊ฒƒ์ด 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋น„์šฉ ๋”ํ•˜๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

     

    ํ•˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ถˆํ•„์š”ํ•œ ๋น„์šฉ๊นŒ์ง€ ๋”ํ•ด๋ฒ„๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

     

    ์ตœ์ข… ์ฝ”๋“œ

    ํ•œ ์„ฌ์ด ๋‹ค๋ฅธ ์–ด๋–ค ์„ฌ๊ณผ ์ด์–ด์ง€๋Š”์ง€ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.

    ๊ทธ๋ž˜์„œ ํ•ด์‹œ๋งต์„ ํ†ตํ•ด ์„ฌ์ด ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ–ˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ํ•œ ์„ฌ๊ณผ ๋‹ค๋ฅธ ์„ฌ์˜ ์ตœ์ข… ๋ชฉ์ ์ง€๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ(= ๋˜ ๋‹ค๋ฅธ ์„ฌ์„ ํ†ตํ•ด ์„œ๋กœ ์˜ค๊ณ  ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ)๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋น„์šฉ์„ ๋”ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

     

    ๐Ÿ“– ๋ฌด์—‡์„ ๋ฐฐ์› ๋‚˜

    ํ•ด์‹œ๋งต์„ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค. ์•ž์œผ๋กœ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ผ ๊ฒƒ ๊ฐ™๋‹ค!

    https://stackoverflow.com/questions/34664134/implementing-a-graph-using-a-hashmap

     

    Implementing a Graph using a HashMap

    I'm new to Java, so please keep that in mind before getting trigger happy down-voting. I'm familiar with the popular implementation of a graph of integers using an array. Graph{ int vertices;

    stackoverflow.com

     

    ๋Œ“๊ธ€

Designed by Tistory.