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