백준 문제 링크
폴짝폴짝
- BFS를 사용했다.
- 방문 처리할 변수 visited와 횟수를 저장할 변수 answer를 만들었다.
- 문제에서 징검다리에 쓰여 있는 수의 배수만큼 갈 수 있다고 했는데,
여기서 양의 배수만 되는 것이 아닌 음의 배수도 생각해야한다.
- 양의 배수로 파악했을 때, 방문 처리하고 answer에 횟수를 저장
- 음의 배수로 파악했을 때, 방문 처리하고 answer에 횟수를 저장
- bfs(A)를 실행시킨 후 목표 지점의 횟수를 반환하면 끝!
from collections import deque
N = int(input())
graph = list(map(int, input().split()))
A, B = map(int, input().split())
visited = [False] * N
answer = [0] * N
def bfs(x):
queue = deque()
queue.append(x-1)
visited[x-1] = True
while queue:
v = queue.popleft()
for i in range(v, N, graph[v]):
if not visited[i]:
visited[i] = True
answer[i] = answer[v] + 1
queue.append(i)
for i in range(v, -1, -graph[v]):
if not visited[i]:
visited[i] = True
answer[i] = answer[v] + 1
queue.append(i)
bfs(A)
if answer[B-1] == 0:
print(-1)
else:
print(answer[B-1])