<Algorithm> 167. 가장 먼 노드(Programmers)
by BFine반응형
가장 먼 노드(Programmers)
사용 알고리즘 : 다익스트라(BFS)
- BFS, DFS 문제만 풀다보니 잊어버릴꺼 같아서 최단경로 문제를 풀어보았다. 쉬운 문제 였지만 확실히 빠릿하게 풀진 못했다...
- 다풀고 제출했더니 마지막 두 케이스에서 메모리 초과가 발생했다. 처음에 배열로 해보고 싶어서 배열로 만들었더니 그게 문제가 되었다.
- int형 배열은 하나당 4Byte 이므로 최대 4Byte * 50000 * 50000 -> 9.31 GB .... 메모리초과가 무조건 발생할 수 밖에 없었다.
문제에 대한 접근&생각
- 1번 정점부터 각 정점까지의 최단거리 -> 다익스트라
내 코드
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
|
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class Solution {
static List<Integer>[] list;
static int[] dist;
static int max;
public static int solution(int n, int[][] edge) {
/******************************
* BFS를 이용해 다익스트라를 구성하여
* 정점 0부터의 각각의 정점까지 최단경로를
* 구한다. 이때 최댓값을 판단하여 그 갯수를
* 출력한다.
*******************************/
list = new ArrayList[n];
for(int i = 0; i < n; i++) list[i] = new ArrayList<>();
for(int i = 0; i < edge.length; i++) {
list[edge[i][0]-1].add(edge[i][1]-1);
list[edge[i][1]-1].add(edge[i][0]-1);
}
dist = new int[n];
Arrays.fill(dist, 9999);
path(n);
int cnt = 0;
for(int i = 0; i < dist.length; i++) {
if(max == dist[i]) cnt++;
}
return cnt;
}
public static void path(int n) {
Queue<Integer> queue = new LinkedList<>();
queue.add(0);
dist[0] = 0;
while (!queue.isEmpty()) {
int vertex = queue.remove();
for(Integer i : list[vertex]) {
if(dist[i] > dist[vertex]+1 && dist[i] == 9999) {
dist[i] = dist[vertex]+1;
queue.add(i);
max = Math.max(max, dist[i]);
}
}
}
}
}
|
|
|
|
cs |
얻은 것
- 쉬운 문제라도 문제의 방향을 확실히 정하고 배열을 사용할때 배열의 크기를 한번 더 확인해야 겠다.
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 169. 구명보트(Programmers) (0) | 2019.04.18 |
---|---|
<Algorithm> 168. 큰수만들기(Programmers) (0) | 2019.04.17 |
<Algorithm> 166. 징검다리(Programmers) (0) | 2019.04.16 |
<Algorithm> 165.무선충전(SWExpert) (0) | 2019.04.10 |
<Algorithm> 164. 연구소(BJO) (0) | 2019.04.10 |
블로그의 정보
57개월 BackEnd
BFine