-- 예전 기록/AtCoder

[ AtCoder ] Boot camp for Beginners - ( ABC 065 ) B - Trained?

rejo 2024. 1. 18. 16:49

https://atcoder.jp/contests/abc065/tasks/abc065_b

 

B - Trained?

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

 

1번 버튼부터 시작해서, 1번 버튼에서 이어지는 버튼인 a[1]번 버튼으로, a[1]번 버튼에서 이어지는 버튼인 a[a[1]]번 버튼으로, a[a[1]] 번 버튼에서 이어지는 버튼인 a[a[a[1]]] 버튼으로.... 계속해서 찾아가면서 2번 버튼에 도달하면 버튼을 거쳐간 횟수를 출력한다.

방문 배열을 추가해서, 만약 이전에 이어졌던 버튼에 다시 도달했다면 2번 버튼에 도달하지 못하고 루프가 발생한다는 뜻이므로 -1을 출력한다.

 

import sys
input = sys.stdin.readline

n = int(input().rstrip())
arr = [int(input().rstrip()) for _ in range(n)]
vis = [0 for _ in range(n)]

nowidx = 0
vis[0] = 1
cnt = 0
while nowidx != 1:
    nowidx = arr[nowidx]-1
    if vis[nowidx] == 1: 
        cnt = -1
        break
    vis[nowidx] = 1
    cnt += 1

print(cnt)