ProblemSolving/BOJ
[백준] 11060번 - 점프 점프 (Python)
적절
2023. 3. 12. 21:06
반응형
문제
https://www.acmicpc.net/problem/11060
11060번: 점프 점프
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로
www.acmicpc.net
접근 방법
동적 계획법 문제이다.
맨 오른쪽 칸부터 맨 왼쪽 칸 순서로 최소 점프 횟수를 구해나가면 된다.
맨 오른쪽 칸에서의 최소 점프 횟수는 0이고,
그 외 칸의 최소 점프 횟수는 그 칸에 적혀 있는 수가 N이라 했을 때, 그 다음칸 N개의 칸 중 최소 점프 횟수 + 1이다.
코드
N = int(input())
arr = list(map(int, input().split()))
INF = 10 ** 10
dp = [INF] * N # dp[i]는 i번째(i>=0)에서 끝 점까지의 최소 점프 횟수
dp[-1] = 0 # 끝 점은 점프를 하지 않고 바로 갈 수 있다.
for i in range(N - 2, -1 , -1):
if arr[i] > 0:
dp[i] = min(INF, min(dp[i+1:i+1+arr[i]]) + 1) # 다음 N칸 중 최소 점프 횟수 + 1칸 이동하면 끝 점으로 갈 수 있다.
if dp[0] == INF:
print(-1)
else:
print(dp[0])
풀이 정보
시도 횟수: 1회
총 문제 풀이에 걸린 시간: 7분 36초
반응형