[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.)