프로그래머스 - 합승 택시 요금

well-life-gm·2021년 12월 19일
0

프로그래머스

목록 보기
88/125

프로그래머스 - 합승 택시 요금
사진1
효율성 생각 안하고 일단 플로이드 와샬을 사용하면 정확성은 맞출 수 있을 것 같아서 시도했는데, 효율성도 바로 통과되었다.

s부터 시작해서 임의의 K노드까지의 최단거리와 K부터 a, b까지의 최단거리를 합한 거리 중 최단거리를 반환해주면 된다.

코드는 아래와 같다.

#include <string>
#include <vector>

using namespace std;

#define pii pair<int, int>
#define INF (1 << 25)

int solution(int n, int s, int a, int b, vector<vector<int>> fares) {
    int answer = INF;
    vector<vector<pii>> graph(n + 1);
    for(auto it : fares) {
        graph[it[0]].push_back( { it[1], it[2]} );
        graph[it[1]].push_back( { it[0], it[2]} );
    }
    vector<vector<int>> cost(n + 1, vector<int>(n + 1, INF));
    for(int i=1;i<=n;i++)
        cost[i][i] = 0;
    
    for(int i=1;i<=n;i++) 
        for(int j=0;j<graph[i].size();j++) 
            cost[i][graph[i][j].first] = graph[i][j].second;
        
    for(int mid=1;mid<=n;mid++) 
        for(int start=1;start<=n;start++) 
            for(int end=1;end<=n;end++) 
                if(cost[start][end] > cost[start][mid] + cost[mid][end])
                    cost[start][end] = cost[start][mid] + cost[mid][end];
    
    for(int mid=1;mid<=n;mid++) {
        int total = cost[s][mid] + cost[mid][a] + cost[mid][b];
        answer = answer > total ? total : answer;
    }
    
    return answer;
}

결과1

profile
내가 보려고 만든 블로그

0개의 댓글