합승 택시 요금

LJM·2023년 8월 15일
0

programmers

목록 보기
58/92

합승한다는것에만 초점을 두고 생각하다가 막혔다

합승해서 이동하는걸 어떻게 처리해야 하는거지 이생각만 한거 같다

결국 S에서 중간지점 M 으로 같이 이동했다는건 S에서M으로가는 거리가 최단거리가 되는것을 구하면 되는것이라는 생각의 전환을 못한거 같다 SM + AM + BM 이렇게 하면 되므로

플로이드 워셜을 사용하면 된다.

import java.util.*;

class Solution {
    public int solution(int n, int s, int a, int b, int[][] fares) {
        
        int[][] fw = new int[n+1][n+1];
        final int MAX = 200 * 100000 + 1;
        for(int i = 1; i <= n; ++i)
        {
            Arrays.fill(fw[i], MAX);
            fw[i][i] = 0;
        }
        
        for(int i = 0; i < fares.length; ++i)
        {     
            int st = fares[i][0];
            int dest = fares[i][1];
            int dist = fares[i][2];
            
            fw[st][dest] = dist;
            fw[dest][st] = dist;
        }
        
        for(int m = 1; m <= n; ++m)
        {
            for(int i = 1; i <= n; ++i)
            {
                for(int j = 1; j <= n; ++j)
                {
                    if(fw[i][j] > fw[i][m] + fw[m][j])
                    {
                        fw[i][j] = fw[i][m] + fw[m][j];
                        fw[j][i] = fw[i][m] + fw[m][j];
                    }                        
                }
            }
        }
       
        int answer = Integer.MAX_VALUE;  // 초기값 변경
        for(int i = 1; i <= n; ++i)
        {
            answer = Math.min(answer, fw[s][i] + fw[i][a] + fw[i][b]);
        } 
        
        return answer;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글