์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค
๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS/๋ฐ”ํ‚น๋…

[JAVA] ๋ฐฑ์ค€ 1507๋ฒˆ ใ€G2.๊ถ๊ธˆํ•œ ๋ฏผํ˜ธใ€‘

๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS/๋ฐ”ํ‚น๋…

[JAVA] ๋ฐฑ์ค€ 1507๋ฒˆ ใ€G2.๊ถ๊ธˆํ•œ ๋ฏผํ˜ธใ€‘

2023. 10. 12. 17:13

๋ฌธ์ œ

 

1507๋ฒˆ: ๊ถ๊ธˆํ•œ ๋ฏผํ˜ธ

์ฒซ์งธ ์ค„์— ๋„์‹œ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 20)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฐ๊ฐ์˜ ๋„์‹œ ์‚ฌ์ด์— ์ด๋™ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์ฃผ์–ด์ง„๋‹ค. A์—์„œ B๋กœ ๊ฐ€๋Š” ์‹œ๊ฐ„๊ณผ B์—์„œ A๋กœ ๊ฐ€๋Š” ์‹œ๊ฐ„์€ ๊ฐ™๋‹ค. ๋˜, A์™€ B

www.acmicpc.net

 

ํ’€์ด

1๏ธโƒฃ ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ํ’€์ด

๐Ÿ’ก ์ฐธ๊ณ ํ•œ Idea

๋จผ์ € ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋น„์šฉ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด๋ฏธ ํ•œ๋ฒˆ ๊ฑฐ์นœ ๋น„์šฉ ๊ทธ๋ž˜ํ”„๋ผ๊ณ  ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ ๋‚˜์„œ, ์ด ๊ทธ๋ž˜ํ”„๋ฅผ ๋‹ค์‹œ ๋ถ„ํ•ด๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๋ถ„ํ•ดํ•  ์ˆ˜ ์žˆ์„๊นŒ?

ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ

costs[u][v] = Math.min(costs[u][v], costs[u][m] + costs[m][v]);โ€‹


์œ„์™€ ๊ฐ™์ด u์—์„œ v๋กœ ๊ฐ€๋Š” ๋น„์šฉ๋ณด๋‹ค, u์—์„œ m์œผ๋กœ ๊ฐ„๋‹ค์Œ m์—์„œ v๋ฅผ ๊ฑฐ์ณ์„œ ๊ฐ€๋Š” ๋น„์šฉ์ด ์‹ผ ๊ฒฝ์šฐ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋”ฐ๋ผ์„œ,

์ž…๋ ฅ๋ฐ›์€ ๋น„์šฉ ๊ทธ๋ž˜ํ”„์—์„œ

costs[u][v] == costs[u][m] + costs[m][v]

์œ„์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” u v๊ฐ€ ์กด์žฌํ•  ๋•Œ

u์™€ v๋Š” ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์ด๊ณ  ์‹ค์ œ๋กœ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ ์œผ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ๋‹ค.

(๋‹จ, u์™€ v, m์€ ์„œ๋กœ ๋‹ค๋ฅธ ์œ„์น˜์—ฌ์•ผํ•œ๋‹ค.)

๋”ฐ๋ผ์„œ ์œ„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด costs[u][v] = INF ์„ ์ž…๋ ฅํ•˜์—ฌ ๊ฐ„์„ ์„ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋‹ค์‹œ ๋ถ„ํ•ดํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด, ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ตœ์†Œ ๋น„์šฉ์„ ๋‹ค์‹œ ๊ตฌํ•ด๋ณด๊ณ 

๋‹ค์‹œ ๊ตฌํ•œ ์ตœ์†Œ ๋น„์šฉ ๋ฐฐ์—ด์ด ์ฒ˜์Œ์— ์ž…๋ ฅ๋ฐ›์€ ๋น„์šฉ ๋ฐฐ์—ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์•ˆํ•˜๋Š”์ง€ ์ฒดํฌํ•˜๋ฉด๋œ๋‹ค.

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        final int MAX = 250000;
        int[][] g = new int[N][N];
        for (int u = 0; u < N; u++) {
            String[] input = br.readLine().split(" ");
            for (int v = 0; v < N; v++) {
                g[u][v] = Integer.parseInt(input[v]);
            }
        }

        int[][] costs = deepCopy(g);

        for (int m = 0; m < N; m++) {
            for (int u = 0; u < N; u++) {
                for (int v = 0; v < N; v++) {
                    if (costs[u][v] == costs[u][m] + costs[m][v] && (u != v && v != m && u != m)) {
                        costs[u][v] = MAX;
                        costs[v][u] = MAX;
                    }
                }
            }
        }

        int ans = 0;
        for (int r = 0; r < N; r++) {
            for (int c = r + 1; c < N; c++) {
                if (costs[r][c] != MAX) {
                    ans += costs[r][c];
                }
            }
        }

        for (int m = 0; m < N; m++) {
            for (int u = 0; u < N; u++) {
                for (int v = 0; v < N; v++) {
                    costs[u][v] = Math.min(costs[u][v], costs[u][m] + costs[m][v]);
                }
            }
        }

        if (isSame(costs, g)) {
            System.out.println(ans);
        } else {
            System.out.println(-1);
        }


    }

    private static boolean isSame(int[][] costs, int[][] g) {
        int N = g.length;
        for (int r = 0; r < N; r++) {
            for (int c = 0; c < N; c++) {
                if (costs[r][c] != g[r][c]) {
                    return false;
                }
            }
        }
        return true;
    }

    private static int[][] deepCopy(int[][] g) {
        int N = g.length;
        int[][] result = new int[N][N];
        for (int r = 0; r < N; r++) {
            for (int c = 0; c < N; c++) {
                result[r][c] = g[r][c];
            }
        }
        return result;
    }
}

๊ฒฐ๊ณผ

 

  • ๋ฌธ์ œ
  • ํ’€์ด
  • 1๏ธโƒฃ ํ”Œ๋กœ์ด๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ํ’€์ด
  • ๊ฒฐ๊ณผ
'๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป PS/๋ฐ”ํ‚น๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JAVA] ๋ฐฑ์ค€ 13168๋ฒˆ ใ€G3.๋‚ด์ผ๋กœ ์—ฌํ–‰ใ€‘
  • [JAVA] ๋ฐฑ์ค€ 2637๋ฒˆ ใ€G2.์žฅ๋‚œ๊ฐ ์กฐ๋ฆฝใ€‘
  • [JAVA] ๋ฐฑ์ค€ 21276๋ฒˆ ใ€G2.๊ณ„๋ณด ๋ณต์›๊ฐ€ ํ˜ธ์„ใ€‘
  • [JAVA] ๋ฐฑ์ค€ 1967๋ฒˆ ใ€G4.ํŠธ๋ฆฌ์˜ ์ง€๋ฆ„ใ€‘
์šฐ๊ทœ์ด์ธ์šฐ์œค
์šฐ๊ทœ์ด์ธ์šฐ์œค
๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.