단순히 연결된 덩어리를 찾는 게 아니라, "얼마나 깊게 들어갈 수 있는가"가 중요합니다.
ArrayList[]를 사용합니다.A)이 될지 모르므로 모든 정점에서 DFS를 시작합니다.false로 되돌려야 합니다.depth == 4에 도달하는 즉시 탐색을 멈추고 1을 출력합니다.import java.io.*;
import java.util.*;
public class Main {
static List<Integer>[] adjList;
static boolean[] visited;
public static void main(String[] args) throws Exception {
// ... (입력 로직 생략)
// 모든 노드에서 DFS 시작
for (int i = 0; i < n; i++) {
if (dfs(i, 0)) {
System.out.println(1);
return;
}
}
System.out.println(0);
}
static boolean dfs(int node, int depth) {
// 깊이가 4(에지 4개)면 5명이 연결된 것
if (depth == 4) return true;
visited[node] = true; // 방문 처리
for (int next : adjList[node]) {
if (!visited[next]) {
if (dfs(next, depth + 1)) return true;
}
}
visited[node] = false; // 백트래킹: 다른 경로 탐색을 위해 방문 해제
return false;
}
}
depth == 4에서 조기 종료되므로 효율적으로 동작합니다.