algorithm/baekjoon

[백준] 11060번 점프점프(파이썬)

support_u 2023. 3. 12. 17:28

문제

 

 

11060번: 점프 점프

재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로

www.acmicpc.net

코드

import sys
from collections import deque
input = sys.stdin.readline
sys.setrecursionlimit = 10**6

def dist(A, visited):
    q = deque([(0, A[0])])
    while q:
        i, jump = q.popleft()
        for j in range(1, jump + 1):
            if i + j >= N or visited[i + j] != 0:
                continue 
            else:
                visited[i + j] = visited[i] + 1
                q.append(((i + j), A[i + j]))                

N = int(input())
A = list(map(int, input().split()))
visited = [0] * N
          
dist(A, visited)

if N == 1:
    print(0)
else:
    if visited[-1] == 0:
        print(-1)
    else:
        print(visited[-1])

해설

BFS 방법으로 풀어보았다.

맨 처음은 무조건 0, 0이니까 q에 0씩을 넣어주고 for로 점프하는 칸수만큼 뛴다. visited에 점프에 수를 표시했다.

max로 찾으려다가 더 큰수가 있으면 어쩌지 하는 생각에 visited[-1]로 찾았다.

혹시 99%에서 틀렸다면 1칸일 경우 뛰지 않는것을 설정을 안해줘서 틀린 것임으로 꼭 설정해주자!