[programmers] 합승 택시 요금
문제 풀이 : 2021.04.29
문제 풀이
시작점부터 도착지점까지의 최소 비용에 관한 문제이고 다익스트라와 플로이드 와샬 알고리즘을 사용할 수 있다. '합승을 하는 구간' -> '거쳐가는 노드'로 해석할 수 있으므로 플로이드 와샬 알고리즘을 사용하면 된다.
코드
class Solution {
    static int[][] f;
    int INF = 20000001;
    public int solution(int n, int s, int a, int b, int[][] fares) {
        int answer = 2147483647;
        f = new int[n][n];
        for(int i = 0;i<n;i++)
            for(int j = 0;j<n;j++){
                if(i==j)f[i][j] =0;
                else f[i][j] = INF;
            }
        for(int i = 0 ;i<fares.length;i++){
            f[fares[i][0]-1][fares[i][1]-1] = fares[i][2];
            f[fares[i][1]-1][fares[i][0]-1] = fares[i][2];
        }
        floyd(n);
        for(int i = 0;i<n;i++)
            answer = Math.min(answer, f[s-1][i]+f[i][a-1]+f[i][b-1]);    
        return answer;
    }
    
    static void floyd(int n){
        for(int k=0; k<n; k++){
            for(int i=0; i<n; i++){
                for(int j=0; j<n; j++){
                    if(f[i][j]>f[i][k]+f[k][j])
                        f[i][j] = f[i][k]+f[k][j];
                }
            }
        }
    }
}
                Author And Source
이 문제에 관하여([programmers] 합승 택시 요금), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yangjs0523/programmers-합승-택시-요금저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)