-
[Algo Rhythm๐บ๐] ํ๋ก๊ทธ๋๋จธ์ค ๊ณ ๋์ kit ์์Algo Rhythm๐บ๐/Programmers 2020. 7. 29. 14:47
๐ ๋ฌธ์ ์ค๋ช
n๋ช ์ ๊ถํฌ์ ์๊ฐ ๊ถํฌ ๋ํ์ ์ฐธ์ฌํ๊ณ ๊ฐ๊ฐ 1๋ฒ๋ถํฐ n๋ฒ๊น์ง ๋ฒํธ๋ฅผ ๋ฐ์์ต๋๋ค. ๊ถํฌ ๊ฒฝ๊ธฐ๋ 1๋1 ๋ฐฉ์์ผ๋ก ์งํ์ด ๋๊ณ , ๋ง์ฝ A ์ ์๊ฐ B ์ ์๋ณด๋ค ์ค๋ ฅ์ด ์ข๋ค๋ฉด A ์ ์๋ B ์ ์๋ฅผ ํญ์ ์ด๊น๋๋ค. ์ฌํ์ ์ฃผ์ด์ง ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์ ์๋ค์ ์์๋ฅผ ๋งค๊ธฐ๋ ค ํฉ๋๋ค. ํ์ง๋ง ๋ช๋ช ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์คํ์ฌ ์ ํํ๊ฒ ์์๋ฅผ ๋งค๊ธธ ์ ์์ต๋๋ค.
์ ์์ ์ n, ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด results๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ ํํ๊ฒ ์์๋ฅผ ๋งค๊ธธ ์ ์๋ ์ ์์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
-
์ ์์ ์๋ 1๋ช ์ด์ 100๋ช ์ดํ์ ๋๋ค.
-
๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ 1๊ฐ ์ด์ 4,500๊ฐ ์ดํ์ ๋๋ค.
-
results ๋ฐฐ์ด ๊ฐ ํ [A, B]๋ A ์ ์๊ฐ B ์ ์๋ฅผ ์ด๊ฒผ๋ค๋ ์๋ฏธ์ ๋๋ค.
-
๋ชจ๋ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ์๋ ๋ชจ์์ด ์์ต๋๋ค.
๐ฏ ์ด๋ป๊ฒ ํ์๋
class Solution { private static final int INF = 9999999; public int solution(int n, int[][] results) { int answer = 0; int[][] d = new int[n+1][n+1]; // init distance for(int i = 1; i < d.length; i++) { for(int j = 1; j < d.length; j++) { d[i][j] = (i == j) ? 0 : INF; } } for(int i = 0; i < results.length; i++) { d[results[i][0]][results[i][1]] = 1; } // Floyd-Warshall for(int k = 1; k < d.length; k++) { // k : ๊ฑฐ์ณ๊ฐ๋ ๋ ธ๋ for(int i = 1; i < d.length; i++) { // i : ์ถ๋ฐ ๋ ธ๋ for(int j = 1; j < d.length; j++) { // j : ๋์ฐฉ ๋ ธ๋ if(d[i][k] + d[k][j] < d[i][j]) { d[i][j] = d[i][k] + d[k][j]; } } } } for(int i = 1; i < d.length; i++) { int nWin = 0, nLose = 0; // count nWin for(int j = 1; j < d.length; j++) { if(i == j) continue; if(d[i][j] != INF) nWin++; } //count nLose for(int j = 1; j < d.length; j++) { if(i == j) continue; if(d[j][i] != INF) nLose++; } // ์์ ์ ์ ์ธํ ์ ์๋ค๊ณผ์ ์นํจ์ฌ๋ถ๋ฅผ ์๋ค. => ์์๋ฅผ ํ์คํ ์๋ค. if(nWin + nLose == (n - 1)) answer++; } return answer; } }
๐ง ์ ์ ๋ ๊ฒ ํ์๋
์ฒ์์๋ ์ด๊ธด ์ ์ ๋ ธ๋์์ ์ง ์ ์ ๋ ธ๋๋ก ํฅํ๋ directed graph๋ฅผ ๋ง๋ ํ ํ ์ ์์ ๋ ธ๋์์ dfs๋ฅผ ํตํด ๊ทธ ์ ์๊ฐ ์ด๊ธธ ์ ์๋ ์ ์๋ค์ ์ฐพ์ ๋ค '์ด๋ป๊ฒ' ํ๋ ค๊ณ ํ์ผ๋ ํ์ฐธ '์ด๋ป๊ฒ' ๋ถ๋ถ์ด ๋ ์ค๋ฅด์ง ์์๋ค. ๊ทธ๋์ ์ง๋ฌธํ๊ธฐ๋ฅผ ๋ณด๊ณ ๋ฌธ์ ์ ๋ํ ํํธ๋ฅผ ์ป์๋ค.
์ด๋ค ๋ถ์ด ์ด ๋ฌธ์ ๋ Floyd-warshall ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ํ์ จ๋ค. Floyd-warshall ์๊ณ ๋ฆฌ์ฆ์ด ์ ํํ ๊ธฐ์ต๋์ง ์์์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ํตํด ๋ค์ ๊ณต๋ถํ๋ค.
24. ํ๋ก์ด๋ ์์ฌ(Floyd Warshall) ์๊ณ ๋ฆฌ์ฆ
์ง๋ ์๊ฐ์๋ ๋ค์ต์คํธ๋ผ(Dijkstra) ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ํ์ตํ์ต๋๋ค. ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ ์ ์ ...
blog.naver.com
๊ณต๋ถ๋ฅผ ํ๊ณ ๋๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ ์ฌ๋๋ค.
๋จผ์ ์ด๊ธด ์ ์ ๋ ธ๋์์ ์ง ์ ์ ๋ ธ๋๋ก cost๊ฐ 1์ธ edge๋ฅผ ์ด๊ธฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ Floyd-warshall ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ ์ฒด ๋ ธ๋์์ ๋ค๋ฅธ ์ ์ฒด ๋ ธ๋๋ฅผ ํฅํ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ค๋ค.
๋ง์ง๋ง์ผ๋ก A ๋ ธ๋๋ฅผ ์ถ๋ฐ๋ ธ๋๋ก ํ ๋ ๋๋ฌํ ์ ์๋(์ต์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฌดํ์ด ์๋) ๋ค๋ฅธ ๋ ธ๋์ ๊ฐ์ ์ฆ, A ์ ์๊ฐ ์ด๊ธธ ์ ์๋ ์ ์๋ค์ ์์ A ๋ ธ๋๋ฅผ ๋์ฐฉ๋ ธ๋๋ก ํ ๋ ๋๋ฌํ ์ ์๋(์ต์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฌดํ์ด ์๋) ๋ค๋ฅธ ๋ ธ๋์ ๊ฐ์ ์ฆ, A ์ ์๋ฅผ ์ด๊ธธ ์ ์๋ ์ ์๋ค์ ์๊ฐ n - 1๋ช ์ด๋ฉด answer๋ฅผ 1 ์ฆ๊ฐํ๋ค.
๐ ๋ฌด์์ ๋ฐฐ์ ๋
์๊ณ ๋ฆฌ์ฆ ์๊ฐ์ ๋ฐฐ์ด ๊ทธ๋ํ ์ด๋ก ๋ค์ ๋ง์ด ๊น๋จน์๋ค. ์ฃผ๋ง์ ์ญ ํ ๋ฒ ์ ๋ฆฌํด์ผ๊ฒ ๋ค.
'Algo Rhythm๐บ๐ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
-