diff --git a/g0rnn/README.md b/g0rnn/README.md index c0d0128..f49870e 100644 --- a/g0rnn/README.md +++ b/g0rnn/README.md @@ -34,5 +34,6 @@ | 30차시 | 2025.07.28 | segment-tree | [커피숍2](https://www.acmicpc.net/problem/1275) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/121 | | 31차시 | 2025.08.03 | segment-tree | [음주코딩](https://www.acmicpc.net/problem/5676) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/127 | | 32차시 | 2025.08.09 | topology-sort | [문제집](https://www.acmicpc.net/problem/1766) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/128 | +| 33차시 | 2025.08.21 | tree | [트리의 지름](https://www.acmicpc.net/problem/1167) | https://github.com/AlgoLeadMe/AlgoLeadMe-12/pull/134 | --- diff --git "a/g0rnn/\355\212\270\353\246\254/33-g0rnn.java" "b/g0rnn/\355\212\270\353\246\254/33-g0rnn.java" new file mode 100644 index 0000000..2aa5b3b --- /dev/null +++ "b/g0rnn/\355\212\270\353\246\254/33-g0rnn.java" @@ -0,0 +1,54 @@ +package beakjoon; + +import java.io.*; +import java.util.*; + +public class Sol1167 { + + static int v; + static List> tree = new ArrayList<>(); + static int endNode, max = -1; + static boolean[] visited; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + v = Integer.parseInt(br.readLine()); + for (int i = 0; i <= v; i++) { + tree.add(new ArrayList<>()); + } + for (int i = 0; i < v; i++) { + StringTokenizer st = new StringTokenizer(br.readLine()); + int cur = Integer.parseInt(st.nextToken()); + while (true) { + int u = Integer.parseInt(st.nextToken()); + if (u == -1) break; + int cost = Integer.parseInt(st.nextToken()); + tree.get(cur).add(new int[]{u, cost}); + } + } + br.close(); + + visited = new boolean[v + 1]; + //visited[0] = true; + dfs(1, 0); + + visited = new boolean[v + 1]; + //visited[endNode] = true; + //max = -1; + dfs(endNode, 0); + + System.out.println(max); + } + + private static void dfs(int node, int len) { + if (len > max) { + max = len; + endNode = node; + } + visited[node] = true; + for (int[] next : tree.get(node)) { + if (visited[next[0]]) continue; + dfs(next[0], len + next[1]); + } + } +}