알고리즘
[Algorithm/Java] kakao 2021 합승택시요금
지수쓰
2021. 7. 14. 00:34
반응형
import java.util.*;
class Solution {
public static int solution(int n, int s, int a, int b, int[][] fares) {
final int MAX = 100000001;
int [][] map = new int[n+1][n+1];
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
map[i][j]=MAX;
}
map[i][i]=0;
}
for(int i=0; i<fares.length; i++){
map[fares[i][0]][fares[i][1]] = fares[i][2];
map[fares[i][1]][fares[i][0]] = fares[i][2];
}
for(int k=1; k<=n; k++){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(map[i][j] > map[i][k]+ map[k][j]){
map[i][j] = map[i][k]+map[k][j];
}
}
}
}
int answer = MAX;
for(int i=1; i<=n; i++){
if(answer > map[s][i] + map[i][a]+ map[i][b]){
answer = map[s][i]+map[i][a]+map[i][b];
}
}
return answer;
}
}
다익스트라 하거나 플로이드와샬로 최소거리 구해준다음
if(answer > map[s][i] + map[i][a]+ map[i][b]){
answer = map[s][i]+map[i][a]+map[i][b];
}
이걸해주면되는거여따. .
<노션에적은 내용>
플로이드와샬은 하고나서 answer = map[s][i]+map[i][a]+map[i][b];
시작점→특정노드 + 특정노드→a + 특정노드→b 최솟값 더한거로 갱신한다는 비슷한 생각은 했는데
특정노드로 옮겨가는 동안 뭔가 해줘야될까싶어서 큐에다가 노드 넣고 빼고,, 복잡하게 생각했었다
근데 그냥 최소거리 다익스트라나 플로이드 이용해서 구하고 저 식 모든 노드에대해서 해주면 되는거였음.
MAX값이 100000이 아니라 다 더했을때도 MAX여야되니까 값을 더 크게 잡아야 되는것, 자기자신으로 가는거리는 0이어야되는것 주의
병사 찾기?문제 힌트보고 천천히 생각해서 한번에 구현은 했다.
0일때 0보다 클때 0보다 작을때의 분기 나눠줘야하는 점 찾으려니까 좀 오래걸렸다ㅣ. 처음부터 잘 생각할것