문제
알고리즘
- 반복문을 통해 점프를 확인한다.
- 점프로 갈 수 있는 칸을 확인하여 점프한 칸에 점프 횟수에 값을 최솟값으로 초기화한다.
- 마지막 칸에 점프 횟수가 바뀌었다면 점프 횟수를 출력하고 아니라면 -1을 출력한다.
코드
# 10:25 => 10:51
import sys
n = int(sys.stdin.readline())
a = list(map(int, sys.stdin.readline().split()))
dp = [sys.maxsize] * (n + 1)
dp[0] = 0
# 반복문을 통해 점프를 확인한다.
for i in range(n):
# 점프로 갈 수 있는 칸을 확인
for j in range(a[i]):
if i + j + 1 < len(dp):
# 점프한 칸에 점프 횟수에 값을 최솟값으로 초기화
dp[i + j + 1] = min(dp[i + j + 1], dp[i] + 1)
# 마지막 칸에 점프 횟수가 바꼈다면 점프 횟수를 출력
if dp[n - 1] < sys.maxsize:
print(dp[n - 1])
else:
print(-1)
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 14502번(파이썬): 연구소 (0) | 2022.04.30 |
---|---|
[baekjoon] 백준 10989번(파이썬): 수 정렬하기 3 (0) | 2022.04.28 |
[baekjoon] 백준 15988번(파이썬): 1, 2, 3 더하기 3 (0) | 2022.04.26 |
[baekjoon] 백준 10819번(파이썬): 차이를 최대로 (0) | 2022.04.25 |
[baekjoon] 백준 18428번(파이썬): 감시 피하기 (2) | 2022.04.23 |