이번 문제는 그래프를 탐색하여 해결하는 문제이다. 그래프는 인접 리스트 형태로 저장하였다. 그리고 방문처리 리스트를 사용하여 한 사람이 두 번 이상 말하지 않도록 하였다. 데크를 사용하여 while문의 반복 횟수를 조절하였다.
finger[i]
에 a를 넣는다.visited[cur]
를 True로 갱신한다.finger[cur]
을 순회하는 nxt에 대한 for문을 돌린다.visited[nxt]
가 False일 경우,import collections
n, m=map(int, input().split())
finger=[[] for _ in range(n)]
cnt=0
answer=-1
for i in range(n):
a=int(input())
finger[i].append(a)
visited=[False for _ in range(n)]
q=collections.deque()
q.append(0)
while q:
cur=q.popleft()
if cur==m:
answer=cnt
break
visited[cur]=True
for nxt in finger[cur]:
if not visited[nxt]:
q.append(nxt)
cnt+=1
print(answer)