p_합승택시요금_72413

source school.programmers.co.kr/learn/course...
topics
600-알고리즘 & 코딩테스트 603 동적프로그래밍
types 문제풀이
정답여부 실수

문제

서로다른 사람 A,B가 같은 곳에서 출발해서 각각 다른지점에 갈려고한다.

플로이드워셜일 각이 빡온다.
출발지는하나이나. 경유햇을경우!
역시맞앗다 ㅋㅋ
이때 유의해야할께 k가 가장 밖에잇어야한다는거시다.!

function solution(n, s, a, b, fares) {
    //n 지점개수 , s 시작점, ab 각각 집들
    //fares [c, d, f] c<->d 의 비용 : f
    a -= 1; b -= 1; s-=1;
    let dist = [];
    for(let i =0;i<n;i++){
        let tmp = [];
        for(let j =0;j<n;j++){
            if(i===j){
                tmp.push(0)
            }else{
                tmp.push(Infinity);
            }
        }
        dist.push(tmp)
    }
    for(let i =0;i<fares.length;i++){
        let [c,d,f] = fares[i];
        if(dist[c-1][d-1]>f){
            dist[c-1][d-1] = f
            dist[d-1][c-1] = f
        }
    }
    for(let k =0;k<n;k++){
        for(let i =0;i<n;i++){
            for(let j =0;j<n;j++){
                dist[i][j] = Math.min(dist[j][i],dist[i][j],dist[i][k]+dist[k][j]);
                dist[j][i] = dist[i][j] 
            }
        }
    }
    // console.log(dist)
    let answer = dist[s][a]+dist[s][b];
    // console.log(answer)
    for(let k =0;k<n;k++){
        let tmp = dist[s][k]+ dist[k][a]+dist[k][b];
        answer = Math.min(tmp,answer)
    }
    return answer;
}