https://programmers.co.kr/learn/courses/30/lessons/49191
๋ฌธ์
n๋ช ์ ๊ถํฌ์ ์๊ฐ ๊ถํฌ ๋ํ์ ์ฐธ์ฌํ๊ณ ๊ฐ๊ฐ 1๋ฒ๋ถํฐ n๋ฒ๊น์ง ๋ฒํธ๋ฅผ ๋ฐ์์ต๋๋ค. ๊ถํฌ ๊ฒฝ๊ธฐ๋ 1๋1 ๋ฐฉ์์ผ๋ก ์งํ์ด ๋๊ณ , ๋ง์ฝ A ์ ์๊ฐ B ์ ์๋ณด๋ค ์ค๋ ฅ์ด ์ข๋ค๋ฉด A ์ ์๋ B ์ ์๋ฅผ ํญ์ ์ด๊น๋๋ค. ์ฌํ์ ์ฃผ์ด์ง ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์ ์๋ค์ ์์๋ฅผ ๋งค๊ธฐ๋ ค ํฉ๋๋ค. ํ์ง๋ง ๋ช๋ช ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์คํ์ฌ ์ ํํ๊ฒ ์์๋ฅผ ๋งค๊ธธ ์ ์์ต๋๋ค.
์ ์์ ์ n, ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ 2์ฐจ์ ๋ฐฐ์ด results๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋ ์ ํํ๊ฒ ์์๋ฅผ ๋งค๊ธธ ์ ์๋ ์ ์์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- ์ ์์ ์๋ 1๋ช ์ด์ 100๋ช ์ดํ์ ๋๋ค.
- ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ 1๊ฐ ์ด์ 4,500๊ฐ ์ดํ์ ๋๋ค.
- results ๋ฐฐ์ด ๊ฐ ํ [A, B]๋ A ์ ์๊ฐ B ์ ์๋ฅผ ์ด๊ฒผ๋ค๋ ์๋ฏธ์ ๋๋ค.
- ๋ชจ๋ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ์๋ ๋ชจ์์ด ์์ต๋๋ค.
ํ์ด
https://hyeyun.tistory.com/entry/Algorithm-ํ๋ก์ด๋-์์ฌ-Floyd-Warshall-์๊ณ ๋ฆฌ์ฆ
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ์๋ฐ!๐
์ฒ์์ ๋ฌธ์ ๋ ์ดํด์๊ฐ๊ณ ํด์ ๊ฒฐ๊ตญ ์ง๋ฌธ๋ค์ ์ฝ๊ณ ํด๊ฒฐํใธ...ใ ...ใ
- floyd[ i ][ j ] ์ i ์ ์๊ฐ j ์ ์์๊ฒ ์ด๊ฒผ์ผ๋ฉด 1, ์ก์ผ๋ฉด 0์ ์ ์ฅ
- ๊ฑฐ์ณ๊ฐ๋ ์ ์ k ๋ฅผ ๋๊ณ , i ์ ์๊ฐ k ์ ์์๊ฒ ์ด๊ธฐ๊ณ , k ์ ์๊ฐ j ์ ์์๊ฒ ์ด๊ฒผ๋ค๋ฉดโผ๏ธ ๐ i ์ ์๋ j ์ ์๋ณด๋ค ์์๊ฐ ๋์ ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ floyd[ i ][ j ] = 1๋ก ์ ๋ฐ์ดํธ
- ๋ฐ๋๋ก, i ์ ์๊ฐ k ์ ์์๊ฒ ์ง๊ณ , k ์ ์๊ฐ j ์ ์์๊ฒ ์ก๋ค๋ฉด โผ๏ธ ๐ i ์ ์๋ j ์ ์๋ณด๋ค ์์๊ฐ ๋ฎ๊ธฐ ๋๋ฌธ์ floyd[ i ][ j ] = 0์ผ๋ก ์ ๋ฐ์ดํธ
- ๊ฐ ํ์ ๋๋ฉด์, i != j ์ด๊ณ , ๋ชจ๋ ๊ฐ์ด ์ฒ์ ์ด๊ธฐํํ -1 ์ด ์๋๋ผ๋ฉด answer++ ํด์ฃผ์๋ฐ ๐โ๏ธ
์ด๋ ต์ง์์๋ฐ,, ์ด ์๊ณ ๋ฆฌ์ฆ ์๊ฐํ๊ธฐ๊ฐ ์ง์ซ ์ฝ์ง์์๋ฏ....๐คฆโ๏ธ
์ฝ๋
public class ์์ {
public static int solution(int n, int[][] results) {
// Floyd Warshall ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ ํ์ด
int answer = 0;
int[][] floyd = new int[n + 1][n + 1];
// -1 ๋ก ์ด๊ธฐํ
for (int i = 1; i < n + 1; i++) {
for (int j = 1; j < n + 1; j++) {
floyd[i][j] = -1;
}
}
// ์ด๊ธด์ ์๋ 1 , ์ง ์ ์๋ 0
for (int i = 0; i < results.length; i++) {
int win = results[i][0];
int lose = results[i][1];
floyd[win][lose] = 1;
floyd[lose][win] = 0;
}
// k = ๊ฑฐ์ณ๊ฐ๋ ์ ์
for (int k = 1; k < n + 1; k++) {
// i = ์ถฃ๋ฐํ๋ ์ ์
for (int i = 1; i < n + 1; i++) {
// ๋ณธ์ธ์ ํจ์ค
if(k == i)
continue;
for (int j = 1; j < n + 1; j++) {
if (i == j || k == j)
continue;
// i์ ์๊ฐ k์ ์์๊ฒ ์ก๋๋ฐ, k์ ์๊ฐ j์ ์์๊ฒ ์ง๋ฉด -> i์ ์๋ j์ ์์๊ฒ ์ง
if(floyd[i][k] == 0 && floyd[k][j] == 0)
floyd[i][j] = 0;
// i์ ์๊ฐ k์ ์์๊ฒ ์ด๊ฒผ๋๋ฐ, k์ ์๊ฐ j์ ์์๊ฒ ์ด๊ธฐ๋ฉด -> i์ ์๋ j์ ์์๊ฒ ์ด๊น
else if(floyd[i][k] == 1 && floyd[k][j] == 1)
floyd[i][j] = 1;
}
}
}
for (int i = 1; i < n + 1; i++) {
boolean flag = true;
for (int j = 1; j < n + 1; j++) {
if (i == j)
continue;
if (floyd[i][j] == -1) {
flag = false;
break;
}
}
if (flag)
answer++;
}
return answer;
}
public static void main(String[] args) {
int[][] results = { { 4, 3 }, { 4, 2 }, { 3, 2 }, { 1, 2 }, { 2, 5 } };
System.out.println(solution(5, results));
}
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ์ ํ ๋ฒ์ค (0) | 2021.09.21 |
---|---|
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ค๋จ๊ณ ์นซ์ ํ๋งค (0) | 2021.09.20 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋คํธ์ํฌ (0) | 2021.09.15 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3] ์ ์ ์ผ๊ฐํ (0) | 2021.09.15 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋์คํฌ ์ปจํธ๋กค๋ฌ (0) | 2021.09.15 |