BOJ - 1326

주의·2024년 1월 8일
0

boj

목록 보기
59/214

백준 문제 링크
폴짝폴짝

❓접근법

  1. BFS를 사용했다.
  2. 방문 처리할 변수 visited와 횟수를 저장할 변수 answer를 만들었다.
  3. 문제에서 징검다리에 쓰여 있는 수의 배수만큼 갈 수 있다고 했는데,
    여기서 양의 배수만 되는 것이 아닌 음의 배수도 생각해야한다.
  • 양의 배수로 파악했을 때, 방문 처리하고 answer에 횟수를 저장
  • 음의 배수로 파악했을 때, 방문 처리하고 answer에 횟수를 저장
  1. 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])

0개의 댓글