# 문제 링크
https://www.acmicpc.net/problem/11060
# 문제
재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 떨어진 칸으로 한 번에 점프할 수 있다. 예를 들어, 3번째 칸에 쓰여 있는 수가 3이면, 재환이는 4, 5, 6번 칸 중 하나로 점프할 수 있다.
재환이는 지금 미로의 가장 왼쪽 끝에 있고, 가장 오른쪽 끝으로 가려고 한다. 이때, 최소 몇 번 점프를 해야 갈 수 있는지 구하는 프로그램을 작성하시오. 만약, 가장 오른쪽 끝으로 갈 수 없는 경우에는 -1을 출력한다.
# 입력
첫째 줄에 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 Ai (0 ≤ Ai ≤ 100)가 주어진다.
# 출력
재환이가 최소 몇 번 점프를 해야 가장 오른쪽 끝 칸으로 갈 수 있는지 출력한다. 만약, 가장 오른쪽 끝으로 갈 수 없는 경우에는 -1을 출력한다.
# 예제
| 예제입력 | 예제출력 |
| 10 1 2 0 1 3 2 1 5 4 2 |
5 |
# 문제 풀이
Algorithm/백준/Silver/11060. 점프 점프 at main · taerimiiii/Algorithm
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - taerimiiii/Algorithm
github.com
맞은코드
import sys
input = sys.stdin.readline
# 범위 내에 있는지 확인하는 함수
def in_range(x) :
if 0 <= x < n :
return True
return False
# 입력 처리
n = int(input())
arr = list(map(int, input().split()))
# dp
dp = [1001] * n
dp[0] = 0
for i in range(n) :
for j in range(1, arr[i]+1) :
if in_range(i+j) :
dp[i+j] = min(dp[i] + 1, dp[i+j]) #최소를 남기기
# 출력 처리
if dp[-1] == 1001 :
print(-1)
else :
print(dp[-1])
dp 문제이다. 입력 범위가 1 ≤ N ≤ 1,000 이므로 가장 큰 1001을 dp의 초기값으로 해 주었다. 그리고 재환이가 맨 왼쪽에 있으니 첫번째에 0값을 넣어주었다. 이후 입력 받은 리스트(arr)를 탐색하면서 점프 할 수 있는 칸의 값을 최소로 유지해 주면 끝이다. 출력할 때 맨 오른쪽 칸에 갈 수 없는 경우, 즉 마지막 칸 값이 1001인 경우에 -1을 출력하는 예외 처리를 해 주었다.
'알고리즘(algorithm)' 카테고리의 다른 글
| [백준][Python] 18404 현명한 나이트 (0) | 2025.11.16 |
|---|---|
| [백준][Python] 16928 뱀과 사다리 게임 (1) | 2025.11.06 |
| [백준][파이썬] 5430 AC (0) | 2025.10.07 |
| [백준][Python] 1074 Z (0) | 2025.10.03 |
| [백준][파이썬] 1697 숨바꼭질 (0) | 2025.09.23 |