Skip to content

Commit b8cbcde

Browse files
committed
가장 먼 노드
1 parent a9e12db commit b8cbcde

2 files changed

Lines changed: 63 additions & 1 deletion

File tree

Graph/Programmers1.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import java.util.*;
2+
3+
/*
4+
* Programmer 가장 먼 노드
5+
* BFS로 풀어야 될것으로 보임
6+
* */
7+
class Solution {
8+
public int solution(int n, int[][] edge) {
9+
int answer = 1;
10+
11+
Map<Integer, ArrayList<Integer>> graph = new HashMap<Integer, ArrayList<Integer>>(); // 그래프
12+
int[] degree = new int[n + 1];
13+
14+
boolean[] visited = new boolean[n + 1]; // 방문 여부
15+
16+
// 그래프 세팅
17+
for (int i = 1; i <= n; i++) {
18+
graph.put(i ,new ArrayList<Integer>());
19+
}
20+
21+
for (int i = 0; i < edge.length; i++) {
22+
ArrayList<Integer> v1 = graph.get(edge[i][0]);
23+
ArrayList<Integer> v2 = graph.get(edge[i][1]);
24+
25+
if (!v1.contains(edge[i][1])) v1.add(edge[i][1]);
26+
if (!v2.contains(edge[i][0])) v2.add(edge[i][0]);
27+
}
28+
29+
Queue<Integer> q = new LinkedList<Integer>();
30+
31+
// 노드 1 부터 시작
32+
q.offer(1);
33+
visited[1] = true;
34+
35+
// BFS
36+
while (!q.isEmpty()) {
37+
int v = q.poll();
38+
39+
for (int i : graph.get(v)) {
40+
if (!visited[i]) {
41+
degree[i] = degree[v] + 1;
42+
visited[i] = true;
43+
q.offer(i);
44+
}
45+
}
46+
}
47+
48+
// 가장 멀리 있는 노드 개수
49+
int max = 0;
50+
for (int i : degree) {
51+
if (max < i) {
52+
answer = 1;
53+
max = i;
54+
} else if (max == i) {
55+
answer++;
56+
}
57+
}
58+
59+
return answer;
60+
}
61+
}

ReadMe.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,5 @@
5555
---
5656

5757
- [그래프](./Graph)
58-
- leetcode 207
58+
- leetcode 207
59+
- Programmer1 가장 먼 노드

0 commit comments

Comments
 (0)