-
[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 ์๊ฐํ๋ ๊ฑฐ ๋๋ฌด ์ฌ๋ฐ๋ค ๐๐
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
-