👉 문제바로가기
N: 게임에 참여하는 사람의 수(3 ≤ N ≤ 150)
K: 보성이의 번호(1 ≤ K ≤ N - 1)
ai: i번 사람이 지목하는 사람의 번호(0 ≤ i ≤ N - 1, 0 ≤ ai ≤ N - 1)
지목하는 사람의 번호를 입력받아 차례대로 다음 노드로 이동하여 보성이의 번호(K)를 찾는 문제입니다. 어떤 방법으로도 K를 찾지 못한다면 -1을 출력하면됩니다.
방법1: 단순히 지목하는 번호를 리스트에 담고, 그 번호를 가진 사람이 지목하는 번호를 뽑아 K와 일치하는지 확인하면서 몇 번 불렀는지 카운트하면 됩니다.
방법2: M번만에 보성이에게 도달하는 최단 경로를 찾는 문제이므로 bfs를 활용할 수도 있겠네요.
1번 방법에서 최악의 경우 시간복잡도는 O(N)입니다. N의 최댓값은 150이므로 O(N)의 시간복잡도를 가진 알고리즘으로도 충분히 시간 내에 연산이 가능합니다.
import sys
N, K = map(int, sys.stdin.readline().split())
numbers = [int(sys.stdin.readline()) for _ in range(N)]
count = 0
number = 0
for _ in range(N):
if number != K:
number = numbers[number]
count += 1
else:
print(count)
break
else:
print(-1)