[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ / ํŒŒ์ด์ฌ / (ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ)
Problem Solving ๐Ÿ”ฅ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ / ํŒŒ์ด์ฌ / (ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ)

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ•ฉ์Šน ํƒ์‹œ ์š”๊ธˆ

6 4 6 2 [[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]] 82 7 3 4 1 [[5, 7, 9], [4, 6, 4], [3, 6, 1], [3, 2, 3], [2, 1, 6]] 14 6 4 5 6 [[2,6,6], [6,3,7], [4,6,7], [6,5,11], [2,5,12], [5,3,20], [2,4

programmers.co.kr

ํ’€์ด

2021 ์นด์นด์˜ค ๋ฌธ์ œ๋กœ ๋‚˜์˜จ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค.
์ฝ์ž๋งˆ์ž ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ๋ฌธ์ œ์ž„์„ ์•Œ์•„์ฐจ๋ ธ๊ณ , ์ „ํ˜•์ ์ธ ๋ฌธ์ œ๋ผ ๋”ฑํžˆ ํ’€์ด ์„ค๋ช…์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

def solution(n, s, a, b, fares):
    # ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ, ๋ชจ๋“  ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ์˜ ์ตœ์†Œ ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ณ 
    # ( ์‹œ์ž‘์  + x ) + ( x ~ A์˜ ๋์ ) + (x ~ B์˜ ๋์ ) ๊ตฌํ•ด์ฃผ๋ฉด ๋ ๋“ฏ
    INF = 10987654321
    answer = INF

    # ์ดˆ๊ธฐํ™”
    dist = [[ INF for _ in range(n+1)] for _ in range(n+1) ]
    for i in range(1, n+1):
        dist[i][i] = 0
    for (st, ed, w) in fares:
        dist[st][ed] = w
        dist[ed][st] = w

    # ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ
    for k in range(1, n+1):
        for i in range(1, n+1):
            for j in range(1, n+1):
                if dist[i][j] > dist[i][k] + dist[k][j]:
                    dist[i][j] = dist[i][k] + dist[k][j]

    # ๋‹ต ๊ตฌํ•จ
    for i in range(1, n+1):
        answer = min(answer, dist[s][i] + dist[i][a] + dist[i][b])
    return answer