티스토리 뷰
728x90
https://www.acmicpc.net/problem/11060
- 문제 :
재환이가 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
'Algorithm > DP(Dynamic Programming' 카테고리의 다른 글
(Java/자바) - 백준(BOJ) 1099번 : 알 수 없는 문장 (0) | 2022.07.26 |
---|---|
(Python/파이썬) - 백준(BOJ) 1082번 : 방 번호 (1) | 2022.05.25 |
(Python) - BOJ(9465번) : 스티커 (0) | 2022.03.04 |
(Python) - BOJ(17626번) : Four Squares (0) | 2022.02.15 |
(Python) - BOJ(11727번) : 2 x n 타일링 2 (0) | 2022.02.09 |
댓글
© 2022 WonSeok, All rights reserved