Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jquery dom 계층 선택자
- jquery 이벤트 처리
- 자바 조합 재귀
- java 내부 클래스
- 자바 재귀 조합
- str to char array
- 순열 재귀
- 자바스크립트 이벤트중지
- char to str
- 자바스크립트 이벤트처리
- 순열코드
- 재귀함수
- 알고리즘 그래프
- 자바
- Java
- 알고리즘
- 재귀
- 서로소
- 자바 순열 코드
- 조합 재귀
- 후위표기
- java lambda
- inner class
- parseInt()
- 상속
- java Collections.sort()
- jquery 속성선택자
- 자바입출력
- jquery 필터선택자
- Interface
Archives
- Today
- Total
유블로그
[프로그래머스] 합승택시요금 Java 본문
[프로그래머스] level3 합승택시요금
소요시간 : 34분
플로이드와샬 문제였다
이 문제가 플로이드와샬 문제라는 것을 알고 풀었으니 할 수 있었지
그게 아니었다면 못 풀었을 듯...
플로이드와샬 개념을 알고 있다면 쉽다..
그래프를 인접행렬에 입력하고
모든 출발지와 경유지와 도착지에 대해서 최소값을 갱신 후
i 가 1 ~ n 에 대해서
s -> i , i -> a, i -> b 를 더한 값이 최소인 값을 반환하면 된다.
class Solution {
static final int INFINITY = Integer.MAX_VALUE;
public int solution(int n, int s, int a, int b, int[][] fares) {
int[][] adjMatrix = new int[n+1][n+1];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if(i == j) adjMatrix[i][j] = 0;
else adjMatrix[i][j] = INFINITY;
}
}
for (int i = 0; i < fares.length; i++) {
adjMatrix[fares[i][0]][fares[i][1]] = fares[i][2];
adjMatrix[fares[i][1]][fares[i][0]] = fares[i][2];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
if(i == j || i == k || j == k) continue;
if(adjMatrix[j][i] == INFINITY || adjMatrix[i][k] == INFINITY) continue;
adjMatrix[j][k] = Math.min(adjMatrix[j][k], adjMatrix[j][i] + adjMatrix[i][k]);
}
}
}
int answer = INFINITY;
for (int i = 1; i <= n; i++) {
answer = Math.min(answer, adjMatrix[s][i] + adjMatrix[i][a] + adjMatrix[i][b]);
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
SW expert 5650 핀볼게임 Java (0) | 2021.04.14 |
---|---|
[프로그래머스] 방문길이 Java (0) | 2021.03.09 |
[프로그래머스] 파일명 정렬 Java (0) | 2021.02.16 |
[프로그래머스] 야근지수 Java (0) | 2021.02.07 |
[백준] baekjoon 14499 주사위굴리기 Java (0) | 2021.02.02 |