From c4adcea1c20050771872976cc5a617d02bd0f333 Mon Sep 17 00:00:00 2001 From: JHLEE325 <82587652+JHLEE325@users.noreply.github.com> Date: Thu, 18 Sep 2025 10:10:45 +0900 Subject: [PATCH] =?UTF-8?q?[20250918]=20BOJ=20/=20G3=20/=20=EA=B2=8C?= =?UTF-8?q?=EC=9E=84=20=EA=B0=9C=EB=B0=9C=20/=20=EC=9D=B4=EC=A4=80?= =?UTF-8?q?=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\354\236\204 \352\260\234\353\260\234.md" | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 "JHLEE325/202509/18 BOJ G3 \352\262\214\354\236\204 \352\260\234\353\260\234.md" diff --git "a/JHLEE325/202509/18 BOJ G3 \352\262\214\354\236\204 \352\260\234\353\260\234.md" "b/JHLEE325/202509/18 BOJ G3 \352\262\214\354\236\204 \352\260\234\353\260\234.md" new file mode 100644 index 00000000..c35c3351 --- /dev/null +++ "b/JHLEE325/202509/18 BOJ G3 \352\262\214\354\236\204 \352\260\234\353\260\234.md" @@ -0,0 +1,62 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static int n; + static int[] buildTime; + static List[] require; + static int[] dp; + static boolean[] visited; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringTokenizer st; + + n = Integer.parseInt(br.readLine()); + buildTime = new int[n + 1]; + require = new ArrayList[n + 1]; + dp = new int[n + 1]; + visited = new boolean[n + 1]; + + for (int i = 1; i <= n; i++) { + require[i] = new ArrayList<>(); + } + + for (int i = 1; i <= n; i++) { + st = new StringTokenizer(br.readLine()); + buildTime[i] = Integer.parseInt(st.nextToken()); + + while (true) { + int pre = Integer.parseInt(st.nextToken()); + if (pre == -1) break; + require[i].add(pre); + } + } + + StringBuilder sb = new StringBuilder(); + for (int i = 1; i <= n; i++) { + sb.append(dfs(i)).append("\n"); + } + System.out.print(sb); + } + + static int dfs(int i) { + if (visited[i]) return dp[i]; + + if (require[i].isEmpty()) { + dp[i] = buildTime[i]; + } else { + int maxPre = 0; + for (int pre : require[i]) { + maxPre = Math.max(maxPre, dfs(pre)); + } + dp[i] = maxPre + buildTime[i]; + } + + visited[i] = true; + return dp[i]; + } +} + +```