๐ ํ๋ก์ด๋-์์
๋ชจ๋ ๋ ธ๋ ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ฉฐ, ์์ ๊ฐ์ค์น๊ฐ ์์ด๋ ์ํํ ์ ์๊ณ , ์๊ฐ ๋ณต์ก๋๋ O(V^3) (V๋ ๋ ธ๋ ์)์ด๋ค.
1. ๋ชจ๋ ๋ ธ๋ ๊ฐ ์ต๋จ๊ฑฐ๋ฆฌ ๋ฐฐ์ด ์ด๊ธฐํ
D[S][E]๋ฅผ ๋ ธ๋S์์ ๋ ธ๋E๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ด๋ผ๊ณ ์ ์ํ๊ณ , S์ E๊ฐ์ผ๋ฉด D[S][E] = 0, ๋๋จธ์ง๋ ๋ฌดํ๋๋ก ์ด๊ธฐํํ๋ค.
2. ์ต๋จ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์ ๊ทธ๋ํ ๋ฐ์ดํฐ ์ ์ฅ
์ถ๋ฐ๋ ธ๋(S), ๋์ฐฉ๋ ธ๋(E), ๊ฐ์ค์น(W) ์ ๋ณด๋ฅผ D[S][E] = W๋ก ์ต๋จ๊ฑฐ๋ฆฌ ๋ฐฐ์ด์ ์ ์ฅ
3. ์ ํ์์ผ๋ก ๋ฐฐ์ด ์ ๋ฐ์ดํธ
์ผ์ค for๋ฌธ์ผ๋ก ๊ฒฝ์ ์ง K, ์ถ๋ฐ๋ ธ๋ S, ๋์ฐฉ๋ ธ๋ E์ ๋ํด D[S][E] = Math.min(D[S][E], D[S][K] + D[K][E]) ๋ก ์ ๋ฐ์ดํธ
์ ์ฒด ๊ฒฝ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ ๋ถ๋ถ ๊ฒฝ๋ก์ ์ต๋จ ๊ฒฝ๋ก์ ์กฐํฉ์ผ๋ก ์ด๋ค์ง๋ค๋ ํ๋ก์ด๋-์์ ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ ์๋ฆฌ๋ก ์ ์ ํ์์ด ๋์ถ๋จ
๐ ๋๋จธ์ง ํฉ - ๋ฐฑ์ค 11404
https://www.acmicpc.net/problem/11404
๋ฌธ์
n(2 ≤ n ≤ 100)๊ฐ์ ๋์๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋์์์ ์ถ๋ฐํ์ฌ ๋ค๋ฅธ ๋์์ ๋์ฐฉํ๋ m(1 ≤ m ≤ 100,000)๊ฐ์ ๋ฒ์ค๊ฐ ์๋ค. ๊ฐ ๋ฒ์ค๋ ํ ๋ฒ ์ฌ์ฉํ ๋ ํ์ํ ๋น์ฉ์ด ์๋ค.
๋ชจ๋ ๋์์ ์ (A, B)์ ๋ํด์ ๋์ A์์ B๋ก ๊ฐ๋๋ฐ ํ์ํ ๋น์ฉ์ ์ต์๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ n์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ m์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ m+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ ๋ฒ์ค์ ์ถ๋ฐ ๋์์ ๋ฒํธ๊ฐ ์ฃผ์ด์ง๋ค. ๋ฒ์ค์ ์ ๋ณด๋ ๋ฒ์ค์ ์์ ๋์ a, ๋์ฐฉ ๋์ b, ํ ๋ฒ ํ๋๋ฐ ํ์ํ ๋น์ฉ c๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์์ ๋์์ ๋์ฐฉ ๋์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค. ๋น์ฉ์ 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์์ ๋์์ ๋์ฐฉ ๋์๋ฅผ ์ฐ๊ฒฐํ๋ ๋ ธ์ ์ ํ๋๊ฐ ์๋ ์ ์๋ค.
์ถ๋ ฅ
n๊ฐ์ ์ค์ ์ถ๋ ฅํด์ผ ํ๋ค. i๋ฒ์งธ ์ค์ ์ถ๋ ฅํ๋ j๋ฒ์งธ ์ซ์๋ ๋์ i์์ j๋ก ๊ฐ๋๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ด๋ค. ๋ง์ฝ, i์์ j๋ก ๊ฐ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ ์๋ฆฌ์ 0์ ์ถ๋ ฅํ๋ค.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
long[][] distance = new long[N+1][N+1];
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if(i == j) distance[i][j] = 0;
else distance[i][j] = Integer.MAX_VALUE;
}
}
for (int i = 0; i < M; i++) {
int u = sc.nextInt();
int v = sc.nextInt();
int w = sc.nextInt();
if(distance[u][v] > w) distance[u][v] = w;
}
for (int k = 1; k <= N; k++) { // ๊ฒฝ์ ๋
ธ๋ k
for (int i = 1; i <= N; i++) { // ์ถ๋ฐ ๋
ธ๋ i
for (int j = 1; j <= N; j++) { // ๋์ฐฉ ๋
ธ๋ j
distance[i][j] = Math.min(distance[i][j],distance[i][k] + distance[k][j]);
}
}
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if(distance[i][j] == Integer.MAX_VALUE)
System.out.print("0 ");
else
System.out.print(distance[i][j]+" ");
}
System.out.println();
}
}
}
๐ ์ผ๋น ๋ฒ ์ด์ปจ์ 6๋จ๊ณ ๋ฒ์น - ๋ฐฑ์ค 1389
https://www.acmicpc.net/problem/1389
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
long[][] arr = new long[N+1][N+1];
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
if(i == j) arr[i][j] = 0;
else arr[i][j] = Integer.MAX_VALUE;
}
}
for (int i = 1; i <= M; i++) {
int s = sc.nextInt();
int e = sc.nextInt();
arr[s][e] = 1;
arr[e][s] = 1;
}
for (int k = 1; k <= N; k++) {
for (int i = 1; i <= N ; i++) {
for (int j = 1; j <= N; j++) {
if(arr[i][j] > arr[i][k] + arr[k][j])
arr[i][j] = arr[i][k] + arr[k][j];
}
}
}
int[] sum = new int[N+1];
int min = Integer.MAX_VALUE;
int ans = -1;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
sum[i] += arr[i][j];
}
if(min > sum[i]){
min = sum[i];
ans = i;
}
}
System.out.println(ans);
}
}
์ฝํ ์ ๋ฆฌ ๊นํ๋ธ ๋งํฌ
GitHub - HyperAlgorithmStudy/BaekJoon: Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ ์คํธ ์คํฐ๋
Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ ์คํธ ์คํฐ๋. Contribute to HyperAlgorithmStudy/BaekJoon development by creating an account on GitHub.
github.com
์ฐธ๊ณ : Do it! ์๊ณ ๋ฆฌ์ฆ ์ฝ๋ฉ ํ ์คํธ: ์๋ฐ ํธ - ๊น์ข ๊ด
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HackerRank] Climbing the Leaderboard (JAVA - binarySearch, stream) (0) | 2023.02.15 |
---|---|
[BOJ] ์ฌ์ - ๋ฐฑ์ค 1256 (์๋ฐ JAVA) - ์กฐํฉ (0) | 2023.01.16 |
[BOJ] ํ์๋จธ์ - ๋ฐฑ์ค 11657 (JAVA) - ๋ฒจ๋ง-ํฌ๋ (1) | 2023.01.09 |
[BOJ] ๊ฒ์ ๊ฐ๋ฐ - ๋ฐฑ์ค 1516 (JAVA) - ์์ ์ ๋ ฌ (0) | 2023.01.07 |
[BOJ] ์ฌํ ๊ฐ์ - ๋ฐฑ์ค 1976 (JAVA) - ์ ๋์จ ํ์ธ๋ (0) | 2023.01.06 |
๋๊ธ