티스토리 뷰
title: "합승 택시 요금"
category: 프로그래머스[Level-3]
tags: [C++, JavaScript, 프로그래머스]
date: "2021-02-08"
문제 링크
C++
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(int n, int s, int a, int b, vector<vector<int>> fares) {
int answer = 0;
// init
vector<vector<int> > graph(n+1, vector<int>(n+1, 100001*n) );
for(auto v: fares){
graph[v[0]][v[1]]=v[2];
graph[v[1]][v[0]]=v[2];
}
// Floyd-Warshall
for(int k=1; k<=n; k++){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(i==j) graph[i][j]=0; // 출발 지점=도착지점
// i에서 j로 가는 최소 요금 = "i에서 j 요금" or "i에서 k요금 + k에서 j요금"
else graph[i][j]=min(graph[i][j], graph[i][k]+graph[k][j]);
}
}
}
answer=100001*n; // Infinite
for(int k=1; k<=n; k++){
// s에서 k까지 + k에서 a까지 + k에서 b까지의 최소
answer=min(answer, graph[s][k]+graph[k][a]+graph[k][b]);
}
return answer;
}
JavaScript
function solution(n, s, a, b, fares) {
var answer = 0;
// init
const graph = Array.from({ length: n + 1 }, () =>
Array.from({ length: n + 1 }, () => 100001 * n)
);
fares.forEach((v) => {
graph[v[0]][v[1]] = v[2];
graph[v[1]][v[0]] = v[2];
});
// Floyd-Warshall
for (let k = 1; k <= n; k++) {
for (let i = 1; i <= n; i++) {
for (let j = 1; j <= n; j++) {
if (i == j) graph[i][j] = 0;
else graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]);
}
}
}
answer = 100001 * n; // Infinite
for (let k = 1; k <= n; k++) {
// s->k + k->a + k->b의 최소
answer = Math.min(answer, graph[s][k] + graph[k][a] + graph[k][b]);
}
return answer;
}
728x90
반응형
'Programmers Solutions > Level-3' 카테고리의 다른 글
[프로그래머스] 가장 긴 팰린드롬 (0) | 2021.02.10 |
---|---|
[프로그래머스] 광고 삽입 (3) | 2021.02.10 |
[프로그래머스] 순위 (0) | 2021.02.08 |
[프로그래머스] 베스트앨범 (0) | 2021.02.07 |
[프로그래머스] 입국심사 (0) | 2021.02.06 |
댓글