From 140d7989bd86486f99c0dc8fd047099799a95510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B0=95=EC=8B=A0=EC=A7=80?= <101992179+ksinji@users.noreply.github.com> Date: Sat, 11 Oct 2025 20:35:19 +0900 Subject: [PATCH] =?UTF-8?q?[20251011]=20BOJ=20/=20G5=20/=20=EC=88=AB?= =?UTF-8?q?=EC=9E=90=EA=B3=A0=EB=A5=B4=EA=B8=B0=20/=20=EA=B0=95=EC=8B=A0?= =?UTF-8?q?=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\352\263\240\353\245\264\352\270\260.md" | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 "ksinji/202510/11 BOJ G5 \354\210\253\354\236\220\352\263\240\353\245\264\352\270\260.md" diff --git "a/ksinji/202510/11 BOJ G5 \354\210\253\354\236\220\352\263\240\353\245\264\352\270\260.md" "b/ksinji/202510/11 BOJ G5 \354\210\253\354\236\220\352\263\240\353\245\264\352\270\260.md" new file mode 100644 index 00000000..4b7a62ba --- /dev/null +++ "b/ksinji/202510/11 BOJ G5 \354\210\253\354\236\220\352\263\240\353\245\264\352\270\260.md" @@ -0,0 +1,54 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static int[] num; + static boolean[] visited; + static boolean[] finished; + static List result = new ArrayList<>(); + + public static void main(String[] args) throws Exception { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + num = new int[N + 1]; + visited = new boolean[N + 1]; + finished = new boolean[N + 1]; + + for (int i = 1; i <= N; i++) { + num[i] = Integer.parseInt(br.readLine()); + } + + for (int i = 1; i <= N; i++) { + if (!visited[i]) dfs(i); + } + + Collections.sort(result); + StringBuilder sb = new StringBuilder(); + sb.append(result.size()).append('\n'); + for (int x : result) { + sb.append(x).append('\n'); + } + System.out.print(sb); + } + + static void dfs(int x) { + visited[x] = true; + int y = num[x]; + + if (!visited[y]) { + dfs(y); + } else if (!finished[y]) { + // 사이클이 존재할 경우 + int cur = y; + do { + result.add(cur); // 사이클에 포함되는 노드 result에 추가 + cur = num[cur]; + } while (cur != y); + } + + finished[x] = true; + } +} +```