ABOUT ME

-

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

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

    ๋„คํŠธ์›Œํฌ๋ž€ ์ปดํ“จํ„ฐ ์ƒํ˜ธ ๊ฐ„์— ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ B๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๊ณ , ์ปดํ“จํ„ฐ B์™€ ์ปดํ“จํ„ฐ C๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์„ ๋•Œ ์ปดํ“จํ„ฐ A์™€ ์ปดํ“จํ„ฐ C๋„ ๊ฐ„์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปดํ“จํ„ฐ A, B, C๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋„คํŠธ์›Œํฌ ์ƒ์— ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n, ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด 2์ฐจ์› ๋ฐฐ์—ด computers๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋„คํŠธ์›Œํฌ์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

     

    ์ œํ•œ์‚ฌํ•ญ

    • ์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 200 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

    • ๊ฐ ์ปดํ“จํ„ฐ๋Š” 0๋ถ€ํ„ฐ n-1์ธ ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    • i๋ฒˆ ์ปดํ“จํ„ฐ์™€ j๋ฒˆ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด computers[i][j]๋ฅผ 1๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    • computer[i][i]๋Š” ํ•ญ์ƒ 1์ž…๋‹ˆ๋‹ค.

     

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

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

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    
    class Solution {
        public int solution(int n, int[][] computers) {
            int nNet = n;
            HashMap<Integer, ArrayList<Integer>> graph = new HashMap<>();
            boolean[] visited = new boolean[n];
            
            // init graph
            for(int i = 0; i < computers.length; i++) {
                for(int j = 0; j < computers.length; j++) {
                    if(i == j || computers[i][j] != 1) continue;
                    
                    ArrayList<Integer> lst = (graph.containsKey(i)) ? graph.get(i) : new ArrayList<>();
                    lst.add(j);
                    graph.put(i, lst);
                }
            }
            
            Iterator<Integer> keys = graph.keySet().iterator();
            while(keys.hasNext()) {
                int k = keys.next();
                visited[k] = true;
                ArrayList<Integer> v = graph.get(k);
                for(int child : v) {
                   if(visited[child] == false) {
                        visited[child] = true;
                        nNet--;
                    } 
                }
            }
            
            return nNet;
        }
    }

     

    ์ตœ์ข… ์ฝ”๋“œ1 (HashMap๊ณผ ArrayList๋ฅผ ์ด์šฉํ•œ graphํ‘œํ˜„)

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    
    class Solution {
        public int solution(int n, int[][] computers) {
            int nNet = 0;
            HashMap<Integer, ArrayList<Integer>> graph = new HashMap<>();
            boolean[] visited = new boolean[n];
            
            // init graph
            for(int i = 0; i < computers.length; i++) {
                ArrayList<Integer> lst = new ArrayList<>();
                for(int j = 0; j < computers.length; j++) {
                    if(i == j || computers[i][j] != 1) continue;
                    
                    lst.add(j);
                }
                graph.put(i, lst);
            }
            
            Iterator<Integer> keys = graph.keySet().iterator();
            while(keys.hasNext()) {
                int k = keys.next();
                if(visited[k] == false) {
                    dfs(graph, visited, k);
                    nNet++;
                }
            }
            
            return nNet;
        }
        
        public void dfs(HashMap<Integer, ArrayList<Integer>> graph, boolean[] visited, int parent) {
            if(visited[parent] == true) return;
            
            visited[parent] = true;
            for(int child : graph.get(parent)) {
             dfs(graph, visited, child);   
            }
        }
    }

     

    ์ตœ์ข… ์ฝ”๋“œ2 (ArrayList๋ฅผ ์ด์šฉํ•œ graph ํ‘œํ˜„)

    import java.util.ArrayList;
    
    class Solution {
        public int solution(int n, int[][] computers) {
            int nNet = 0;
            ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
            boolean[] visited = new boolean[n];
            
            // init graph
            for(int i = 0; i < computers.length; i++) {
                ArrayList<Integer> children = new ArrayList<>();
                for(int j = 0; j < computers.length; j++) {
                    if(i == j || computers[i][j] != 1) continue;
                    children.add(j);
                }
                graph.add(children);
            }
            
            for(int i = 0; i < graph.size(); i++) {
                if(visited[i] == false) {
                    dfs(graph, visited, i);
                    nNet++;
                }
            }
            
            return nNet;
        }
        
        public void dfs(ArrayList<ArrayList<Integer>> graph, boolean[] visited, int parent) {
            if(visited[parent] == true) return;
            
            visited[parent] = true;
            for(int child : graph.get(parent)) {
                dfs(graph, visited, child);
            }
        }
    }

     

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

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

    ์ฒ˜์Œ์—๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ์ปดํ“จํ„ฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์žˆ๊ณ  ํ•œ ์ปดํ“จํ„ฐ์™€ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๊ฐ€ ๋„คํŠธ์›Œํฌ๋กœ ์ด์–ด์ ธ ์žˆ์œผ๋ฉด ์ด๋ฅผ ํ•˜๋‚˜๋กœ ์ทจ๊ธ‰ํ•˜๋„๋ก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. DFS๋‚˜ BFS ๋‘˜ ์ค‘ ์•„๋ฌด๊ฒƒ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค. ์ƒˆ๋กœ์šด ํ’€์ด๋ฒ•์„ ๋ฐœ๊ฒฌํ•œ ๊ฒƒ์ธ๊ฐ€ํ•˜๋ฉฐ ๊ธฐ๋Œ€ํ–ˆ์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ๋Œ€์‹คํŒจ์˜€๋‹ค! ๐Ÿคฆ‍โ™€๏ธ๐Ÿคฃ

     

    ์ตœ์ข… ์ฝ”๋“œ1(HashMap๊ณผ ArrayList๋ฅผ ์ด์šฉํ•œ graph ํ‘œํ˜„), ์ตœ์ข… ์ฝ”๋“œ 2(ArrayList๋ฅผ ์ด์šฉํ•œ graph ํ‘œํ˜„)

    ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณต์žกํ•˜์ง€ ์•Š๋‹ค. ์ผ๋‹จ ๊ทธ๋ž˜ํ”„๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ ๋…ธ๋“œ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋Š”๋ฐ ๋งŒ์•ฝ ๋…ธ๋“œ๊ฐ€ ์ด์ „์— ๋ฐฉ๋ฌธํ•œ ์ ์ด ์—†๋‹ค๋ฉด ์ด์–ด์ง„ ๋ชจ๋“  ๋…ธ๋“œ๋“ค์„ ๋ฐฉ๋ฌธํ•˜๊ณ  ๋„คํŠธ์›Œํฌ ๊ฐœ์ˆ˜๋ฅผ ํ•˜๋‚˜ ๋Š˜๋ ค์ค€๋‹ค.

     

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

    DFS ์ƒ๊ฐํ•˜๋Š” ๊ฑฐ ๋„ˆ๋ฌด ์žฌ๋ฐŒ๋‹ค ๐Ÿ˜†๐Ÿ˜†

    ๋Œ“๊ธ€

Designed by Tistory.