ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ๋ฌธ์ .
๋ชจ๋ ์ ์ ์์ ๋ชจ๋ ์ ์ ์ ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ์ผ์ข ์ DP๋ผ๊ณ ํ๋ค.
3์ค for๋ฌธ์ผ๋ก ํด๊ฒฐ์ ํ๋๋ฐ
1๋ฒ์งธ for๋ฌธ : ๊ฒฝ์ ์ง k
2๋ฒ์งธ for๋ฌธ : ์์์ i
3๋ฒ์งธ for๋ฌธ : ์ข ๋ฃ์ j
์ด๋ ๊ฒ ๋ชจ๋ N์ ๋ํด 3์ค for๋ฌธ์ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ ์ ์ ๊ฐ์๊ฐ ์ ์ ๋ฌธ์ ์์๋ง ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
๊ธฐ๋ณธ์ ์ธ ์์ด๋์ด๋ ๊ฒฝ์ ์ง์ ์ ์ฅ์์ ์๊ฐ์ ํ๋ ๊ฑฐ๋ค.
์์์ i๊ฐ ๋ํํ ์ค๋ ์ต๋จ๊ฑฐ๋ฆฌ + ๋ด๊ฐ ์ข ๋ฃ์ j๋ก ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ์์์ i์์ ์ข ๋ฃ์ j๋ก ๋ฐ๋ก ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ ๋ณด๋ค ์์ผ๋ฉด ๊ฐ์ ๊ฐฑ์ ํด์ค๋ค.
์ฒ์ ์กฐ๊ธ ์์ฌ์ด ๋ค์๋ ๋ถ๋ถ์ ์ ๋ง ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ก ๊ฐฑ์ ์ด ๊ฐ๋ฅํ์ง ์๋ค.
์๋ฅผ ๋ค์ด 2 →4(๊ฒฝ์ )→1(๊ฒฝ์ ) →5 ๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ์ต๋จ ๊ฑฐ๋ฆฌ๋ผ๊ณ ํ์.
๊ทธ๋ฆฌ๊ณ (2,4) (4,1) (1,5) ์ด๋ ๊ฒ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ 4์์ 5๋ก ๊ฐ๋ ๋ฐฉ๋ฒ๋ 1์ ๊ฒฝ์ ํ๋ ๋ฐฉ๋ฒ ๋ฐ์๋ ์๋ค.
์ฒ์์๋ ์์์ง(2)์ ์ ์ฅ์์ ์๊ฐ์ ํ์๋๋ฐ, ๊ทธ๋ฌ๋ค ๋ณด๋๊น ์ด๋ฏธ 4(๊ฒฝ์ )์ for๋ฌธ์ ํ๊ณ ์๋๋ฐ, 4์์ 5๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ์ธ 4 → 1(๊ฒฝ์ ) → 5๋ ๋๋ฝ๋๋ ๊ฒ ์๋๊ฐ? ์ถ์๋ค.
ํ์ง๋ง ๊ทธ๊ฒ ์๋์๋ค. ํ๋ก์ด๋ ์์ฌ์ ๊ฒฝ์ ์ง์ ์
์ฅ์์ ์๊ฐํด์ผ ํ๋ค. 4 → 1(๊ฒฝ์ ) → 5 ๋ 1์ for๋ฌธ์์ ์ด๋ฏธ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์์ dist[4][5]
์ ์๋ง์ ๊ฐ์ ๋ฃ์ด์ฃผ์๊ณ , ์ด์ 4์ ์
์ฅ์์ ์๊ฐํด๋ณด๋ฉด dist[2][4]
(์ง์ ์ ์ผ๋ก ์ด์ด์ ธ์๋ ์ต๋จ ๊ฑฐ๋ฆฌ) + dist[4][5]
(1์ ํตํด ์ด์ด์ง ์ต๋จ๊ฑฐ๋ฆฌ)๋ฅผ ํฉ์ณ์ dist[2][5]
๋ฅผ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ ๊ฒ.
์ด ๋ฌธ์ ๋ ํ๋ก์ด๋ ์์
์๊ณ ๋ฆฌ์ฆ๋ง ์๋ฉด ํ๋ฆฐ๋ค. ๊ฐ์ง์น๊ธฐ๋ ํ์ ์์ง๋ง, ๋ฃ์๋ฉด ์์์ง์ ๊ฒฝ์ ์ง, ์์์ง์ ๋์ฐฉ์ง, ๊ฒฝ์ ์ง์ ๋์ฐฉ์ง์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ continue
๋ฅผ ํตํด ๊ตฌ๋ฌธ์ ์คํตํ๋ค.
์ ๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ์๋ ๋๋ 98%์ฏค์ 'ํ๋ ธ์ต๋๋ค'๊ฐ ๋ด์๋๋ฐ, static int MAX = 100001๋ก ์ด๊ธฐํํ ๊ฒ ๋ฌธ์ ์๋ค. ํ๋์ ๊ฑฐ๋ฆฌ์ ์ต๋ 10๋ง์ ๊ฐ์ด ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์, ๋ ๋์๊ฐ ์ฌํ๊น์ง ํ ๋ฒ๋ ์ฐ๊ฒฐ๋์ง ์์์์ ํํํ๊ธฐ ์ํด์๋ 10๋ง x N(์ต๋ 100)์ธ 1000๋ง ์ด๊ณผ๋ก ํด์ฃผ๋ ๊ฒ ์ข๋ค.
๋ค์ต์คํธ๋ผ์ ๋ฌ๋ฆฌ ํ๋ก์ด๋ ์์ฌ์ ๊ฐ์ ๊ฐ์ด(์ฆ, ๊ฑฐ๋ฆฌ) ๋ง์ด๋์ค์ฌ๋ ์ฌ์ดํด๋ง ์์ผ๋ฉด ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ค๋๋ฐ, ์ด๊ฑด ์ฌ์ดํด์ ๋ํด ์กฐ๊ธ ๋ ์์์ ๋ ๊ณ ๋ฏผํด ๋ด์ผ ๊ฒ ๋ค.
/*2020.12.19*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
static int MAX = 10000001;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine().trim());
int M = Integer.parseInt(br.readLine().trim());
int[][] dist = new int[N+1][N+1];
//1. ๋ชจ๋ ๊ฑฐ๋ฆฌ๋ฅผ MAX ๊ฐ์ผ๋ก ์ต๋ํ
for(int i=1;i<=N;i++) {
for(int j=1;j<=N;j++) {
if(i==j) dist[i][j] = 0;
else dist[i][j] = MAX;
}
}
//2. ๊ฑฐ๋ฆฌ ์
๋ ฅ ๋ฐ์
String[] str;
int s,e,d;
for(int i=1;i<=M;i++) {
str = br.readLine().trim().split(" ");
s = Integer.parseInt(str[0]);
e = Integer.parseInt(str[1]);
d = Integer.parseInt(str[2]);
dist[s][e] = Math.min(dist[s][e], d);
}
//3. ํ๋ก์ด๋ ์์
for(int k=1;k<=N;k++) {
for(int i=1;i<=N;i++) {
if(i==k) continue;
for(int j=1;j<=N;j++) {
if(i==j || j==k ) continue;
dist[i][j] = Math.min(dist[i][j], dist[i][k]+dist[k][j]);
}
}
}
//4. ์ถ๋ ฅ
StringBuilder sb = new StringBuilder();
for(int i=1;i<=N;i++) {
for(int j=1;j<=N;j++) {
if(dist[i][j]==MAX) sb.append("0 ");
else sb.append(dist[i][j]+" ");
}
sb.append("\n");
}
System.out.println(sb.toString().trim());
}
}
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฐ] ๋ฐฑ์ค 1717 - ์งํฉ์ ํํ (0) | 2020.12.29 |
---|---|
[์๋ฐ] ๋ฐฑ์ค 1956 - ์ด๋ (0) | 2020.12.24 |
[์๋ฐ] ๋ฐฑ์ค 2206 - ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2020.12.12 |
[์๋ฐ] ๋ฐฑ์ค 1697 - ์จ๋ฐ๊ผญ์ง (1) | 2020.12.12 |
[์๋ฐ] ๋ฐฑ์ค 7576 - ํ ๋งํ (0) | 2020.12.12 |