Zayson
A to Zayson!
Zayson
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • Computer Science (20)
      • Network (4)
      • DB (12)
      • OS (4)
    • Algorithm (32)
      • ์™„์ „ํƒ์ƒ‰(Brute-Force) (3)
      • ๊ทธ๋ฆฌ๋””(Greedy) (6)
      • ํˆฌํฌ์ธํ„ฐ(Two-Pointer) (1)
      • ๊ทธ๋ž˜ํ”„(Graph) (5)
      • BFS & DFS (9)
      • ๊ตฌํ˜„, ์‹œ๋ฎฌ๋ ˆ์ด์…˜(Implementation) (5)
      • ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP) (3)
    • Backend (51)
      • Spring Boot (19)
      • JPA (16)
      • Kafka (2)
      • Java (13)
      • Kotlin (1)
    • DevOps (1)
      • Jenkins (5)
      • Oracle Cloud Infrastructure (1)
      • Kubernetes & Docker (1)
    • Trouble Shooting (3)
      • JPA (1)
      • Spring Boot (2)
    • ํšŒ๊ณ  (5)
      • ์—”๋นต ํ”„๋กœ์ ํŠธ ํฌ์ŠคํŠธ ๋กœ๋“œ๋งต (1)
      • 2022๋…„ (4)
    • Kafka (7)
      • Kafka (5)
      • Kafka Connect (2)
    • ๊ธฐ์ˆ  ์„œ์  (6)
      • ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ (3)
      • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •๋ณตํ•ด์•ผํ•  ๊ฐ์ฒด ์ง€ํ–ฅ๊ณผ ๋””์ž์ธ ํŒจํ„ด (2)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)

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

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • SpringBoot
  • ๋ผ์ด๋ธŒ์Šคํ„ฐ๋””
  • ์™„์ „ํƒ์ƒ‰
  • kafka
  • ๊ตฌํ˜„
  • CS
  • Java
  • ๋‚˜ ํ˜ผ์ž ์Šคํ”„๋ง๋ถ€ํŠธ!
  • ์—”๋นตํ”„๋กœ์ ํŠธ
  • dfs
  • Backend
  • ๋ฐฑ์ค€
  • Kafka Connect
  • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹ค์ „ ์ž…๋ฌธ
  • JPA
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
  • Computer science
  • ๊ทธ๋ฆฌ๋””
  • spring boot
  • BFS

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Zayson

A to Zayson!

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, Java] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ
Algorithm/๊ทธ๋ž˜ํ”„(Graph)

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค, Java] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ

2022. 8. 9. 19:19

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

https://school.programmers.co.kr/learn/courses/30/lessons/72413

๐Ÿ˜ฎ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์ตœ๋‹จ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์˜ ํ‚คํฌ์ธํŠธ์ด๋‹ค.

๋ชจ๋“  ๋„์‹œ๋กœ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•ด ๋ชจ๋“  ๋„์‹œ๋กœ ๋„์ฐฉํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์ค€๋‹ค. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. (๋ฌด๋ฐฉํ–ฅ ์–‘์ˆ˜ ๊ทธ๋ž˜ํ”„ ๊ธฐ์ค€)

  • ํ•˜๋‚˜์˜ ์ •์  ๊ธฐ์ค€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ตฌํ•˜๊ธฐ → ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : ๋ชจ๋“  ๋„์‹œ์— ๋Œ€ํ•ด ๊ตฌํ•ด์•ผํ•˜๋ฏ€๋กœ for๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋“  ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๋ชจ๋“  ์ •์  ๊ธฐ์ค€ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ → ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

๋ชจ๋“  ์ •์ ์— ๋Œ€ํ•œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

(๋‹ค์ต์ŠคํŠธ๋ผ ์ด์šฉ์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ ๋˜๋Š” ๊ฒƒ ํ™•์ธ!)

 

  1. ๋ชจ๋“  ๋„์ฐฉ ๋„์‹œ์— ๋Œ€ํ•œ ์ตœ์†Œ์š”๊ธˆ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ fees ๋ฐฐ์—ด ์„ ์–ธ ๋ฐ ๋„๋กœ ์ดˆ๊ธฐํ™”
  2. ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹คํ–‰
  3. ์ถœ๋ฐœ ๋„์‹œ์ธ S์—์„œ ๊ฐ๊ฐ A, B์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ดˆ์˜ ์ตœ์†Œ์š”๊ธˆ์€ ํ•ฉ์Šน์•ˆํ•˜๊ณ  ๊ฐ๊ฐ ๊ฐ„ ๊ฒฝ์šฐ → fees[s][a] + fees[s][b];
  4. ์ถœ๋ฐœ ๋„์‹œ์ธ S์—์„œ ํ•ฉ์Šนํ•ด ๊ฐ๊ฐ์˜ ๋„์‹œ๋กœ ๊ฐ„ ํ›„ ํ•ด๋‹น ๋„์‹œ์—์„œ ๋‚ด๋ ค์„œ ๋”ฐ๋กœ ํƒ์‹œํƒ€๊ณ  ๊ฐ„ ๊ฒฝ์šฐ → fees[s][city] + fees[city][a] + fees[city][b];
  5. 3, 4์ค‘ ์ตœ์†Œ ์š”๊ธˆ์„๊ตฌํ•ด ๋ฆฌํ„ด

๐Ÿšฉ Java ์ฝ”๋“œ

package com.second.algorithm.programmers;

import java.util.Arrays;

public class Solution_72413_ํ•ฉ์Šน_ํƒ์‹œ_์š”๊ธˆ {
    public static void main(String[] args) {
        int n = 6;
        int s = 4;
        int a = 6;
        int b = 2;
        int[][] fares = {{4, 1, 10}, {3, 5, 24}, {5, 6, 2}, {3, 1, 41}, {5, 1, 24}, {4, 6, 50}, {2, 4, 66}, {2, 3, 22}, {1, 6, 25}};

        int rst = solution(n, s, a, b, fares);
        System.out.println("rst = " + rst);

    }

    private static final int INF = 200 * 100_000;
    private static int solution(int n, int s, int a, int b, int[][] fares) {

        // ์š”๊ธˆ ๋ฐฐ์—ด ์ดˆ๊ธฐํ™”
        int[][] fees = new int[n + 1][n + 1];
        for (int city = 1; city <= n; city++) {
            Arrays.fill(fees[city], INF);
            fees[city][city] = 0;
        }

        // ๋„๋กœ ์ƒ์„ฑ
        initFees(n, fares, fees);

        // ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        floydWarshall(n, fees);

        // ์ตœ์†Œ ์š”๊ธˆ ๊ตฌํ•˜๊ธฐ
        int minFee = fees[s][a] + fees[s][b]; // ์ตœ์ดˆ ํ•ฉ์Šน ์•ˆํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ตœ์†Œ

        // ํ•ฉ์Šนํ•œ ๊ฒฝ์šฐ s์—์„œ ์ถœ๋ฐœํ•ด ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„์‹œ์—์„œ ๋‹ค์‹œ ๊ฐ๊ฐ์˜ ๋„์‹œ๋กœ์˜ ์ตœ์†Œ์š”๊ธˆ ๊ตฌํ•œ ๊ฐ’๊ณผ ๋น„๊ต
        for (int city = 1; city <= n; city++) {
            minFee = Math.min(minFee, fees[s][city] + fees[city][a] + fees[city][b]);
        }

        return minFee;
    }

    private static void floydWarshall(int n, int[][] fees) {
        for (int mid = 1; mid <= n; mid++) {
            for (int start = 1; start <= n; start++) {
                for (int end = 1; end <= n; end++) {
                    if (start == end) continue;
                    if (fees[start][end] > fees[start][mid] + fees[mid][end]) {
                        fees[start][end] = fees[start][mid] + fees[mid][end];
                    }
                }
            }
        }
    }

    private static void initFees(int n, int[][] fares, int[][] fees) {
        for (int[] fare : fares) {
            int departure = fare[0];
            int destination = fare[1];
            int fee = fare[2];

            fees[departure][destination] = fee;
            fees[destination][departure] = fee;
        }
    }
}
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithm > ๊ทธ๋ž˜ํ”„(Graph)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋ฐฑ์ค€, Java] 2623๋ฒˆ : ์Œ์•…ํ”„๋กœ๊ทธ๋žจ  (0) 2022.08.09
[๋ฐฑ์ค€, Java] 1414๋ฒˆ : ๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ  (0) 2022.06.08
[๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ  (0) 2022.05.13
[๋ฐฑ์ค€, Java] 1707๋ฒˆ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„  (0) 2022.04.27
    'Algorithm/๊ทธ๋ž˜ํ”„(Graph)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋ฐฑ์ค€, Java] 2623๋ฒˆ : ์Œ์•…ํ”„๋กœ๊ทธ๋žจ
    • [๋ฐฑ์ค€, Java] 1414๋ฒˆ : ๋ถˆ์šฐ์ด์›ƒ๋•๊ธฐ
    • [๋ฐฑ์ค€, Java] 18352๋ฒˆ : ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ
    • [๋ฐฑ์ค€, Java] 1707๋ฒˆ : ์ด๋ถ„ ๊ทธ๋ž˜ํ”„
    Zayson
    Zayson
    ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

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