입력 : 첫째 줄 - 게임에 참여하는 사람의 수 N, 보성이의 번호 K (3 ≤ N ≤ 150, 1 ≤ K ≤ N - 1)
N줄 - i번 사람이 지목하는 사람의 번호 ai(0 ≤ i ≤ N - 1, 0 ≤ ai ≤ N - 1)
출력 : 영기가 말해야 하는 가장 작은 양의 정수 M
단, 어떤 방법으로도 보성이가 걸리지 않으면 -1 출력
O(N)
그래프 탐색
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(); // 학생 수
int K = sc.nextInt(); // 목표하는 학생의 번호
int[] students = new int[N]; // 각 학생이 가리키는 학생을 저장하는 배열
for (int i = 0; i < N; i++) {
students[i] = sc.nextInt(); // i번 학생이 가리키는 학생의 번호 입력
}
boolean[] visited = new boolean[N]; // 방문 체크 배열
int current = 0; // 시작 학생은 0번 학생
int steps = 0; // 걸린 단계 수
while (!visited[current]) {
if (current == K) {
System.out.println(steps);
return;
}
visited[current] = true;
current = students[current];
steps++;
}
System.out.println(-1); // 목표 학생에게 도달할 수 없을 경우 -1 출력
}
}