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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
class Solution {
private static int maps[][];
private static int MAX_VALUE = 500001;
public static void Input(int i, int j, int w) {
if (maps[i][j] > w) {
maps[i][j] = w;
maps[j][i] = w;
}
}
public static void Dijkstra(int[][] road, int[] distance, int N, int v) {
boolean[] check = new boolean[N + 1];
int MAX_VALUE = 500001;
// 거리 값 초기화
for (int i = 1; i < N + 1; i++) {
distance[i] = MAX_VALUE;
}
// 시작노드 값 초기화.
distance[v] = 0;
check[v] = true;
// 연결된 노드 거리 값 갱신
for (int i = 1; i < N + 1; i++) {
if (!check[i] && maps[v][i] != 0) {
distance[i] = maps[v][i];
}
}
// 다익스트라 알고리즘 반복 횟수는 N-1
for (int a = 0; a < N - 1; a++) {
int min = MAX_VALUE;
int min_index = -1;
// 최소 값 인덱스 찾기
for (int i = 1; i < N + 1; i++) {
if (!check[i] && distance[i] != MAX_VALUE) {
if (distance[i] < min) {
min = distance[i];
min_index = i;
}
}
}
// 최소 거리 갱신
check[min_index] = true;
for (int i = 1; i < N + 1; i++) {
if (!check[i] && maps[min_index][i] != 0) {
if (distance[i] > distance[min_index] + maps[min_index][i]) {
distance[i] = distance[min_index] + maps[min_index][i];
}
}
}
}
}
public int solution(int N, int[][] road, int K) {
int answer = 0;
int distance[] = new int[N + 1];
maps = new int[N + 1][N + 1];
// map 초기화
for (int i = 1; i < N + 1; i++)
for (int j = 1; j < N + 1; j++)
maps[i][j] = MAX_VALUE;
for (int i = 0; i < road.length; i++)
Input(road[i][0], road[i][1], road[i][2]);
Dijkstra(road, distance, N, 1);
for (int i = 1; i < N + 1; i++) {
if (distance[i] <= K)
answer++;
}
return answer;
}
}
|
cs |
다익스트라 알고리즘으로 해결하였다.
여기서 다중 경로가 입력되는 경우가 있다.
이 때 기존 경로보다 해당 경로가 더 멀 경우에 갱신하지 않도록 예외 처리를 해주어야 한다.
다익스트라 알고리즘에 대해 참고한 사이트는 아래와 같다.
참고 사이트 : https://bumbums.tistory.com/4
'Programmers > Level2' 카테고리의 다른 글
행렬 테두리 회전하기 (0) | 2021.08.07 |
---|---|
거리두기 확인하기 (0) | 2021.08.07 |
adenCase 문자열 만들기 (0) | 2021.08.06 |
순위 검색 (0) | 2021.08.06 |
[3차] 압축 (0) | 2021.08.06 |