티스토리 뷰

728x90

https://www.acmicpc.net/problem/11060

 

11060번: 점프 점프

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

www.acmicpc.net


  • 문제 : 

재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 떨어진 칸으로 한 번에 점프할 수 있다. 예를 들어, 3번째 칸에 쓰여 있는 수가 3이면, 재환이는 4, 5, 6번 칸 중 하나로 점프할 수 있다.

재환이는 지금 미로의 가장 왼쪽 끝에 있고, 가장 오른쪽 끝으로 가려고 한다. 이때, 최소 몇 번 점프를 해야 갈 수 있는지 구하는 프로그램을 작성하시오. 만약, 가장 오른쪽 끝으로 갈 수 없는 경우에는 -1을 출력한다.

 

 

 


  • 풀이 :

출발점에서 1부터 갈수 있는 칸의 최댓값인 maps[0]만큼 더해주며 dp의 값을 더 작은 값으로 갱신해준다.

 

두 번째 for문의 범위를 1부터 maps[i]+1로 해준 이유는 0은 더하는 의미가 없기 때문이다.

마지막에 dp[N-1]값이 초깃값이라면 -1를 출력하고, 아니라면 그 값을 출력한다.

 

 

 


  • 소스코드 : 
N = int(input())
maps = list(map(int,input().split()))
dp = [float('inf') for _ in range(N)]
dp[0] = 0
for i in range(N):
    for j in range(1,maps[i]+1):
        if i+j < N:
            dp[i+j] = min(dp[i+j],dp[i]+1)
if dp[N-1] == float("inf"):
    print(-1)
else:
    print(dp[N-1])
320x100
댓글
© 2022 WonSeok, All rights reserved