문제 설명#
Jump Game II - LeetCode
배열 nums
가 주어질 때, 각 인덱스에서 점프할 수 있는 최대 거리가 배열 요소로 주어집니다.
첫 번째 인덱스(0
)에서 마지막 인덱스(n-1
)로 이동하는 최소 점프 횟수를 구하는 문제입니다.
✅ 제약 조건
- 항상 마지막 인덱스로 도달할 수 있음 (즉, 도달 불가능한 경우는 없음)
1 ≤ nums.length ≤ 10⁴
0 ≤ nums[i] ≤ 1000
1️⃣ DP (O(N²)) → 비효율적#
- 각 인덱스에서 모든 가능한 점프를 고려하여 최적해를 찾음
- 시간 복잡도 O(N²) 으로 큰 입력에서 비효율적
2️⃣ 그리디 알고리즘 (O(N)) [추천]#
- 각 단계에서 최적의 점프 선택 (가장 멀리 갈 수 있는 지점 탐색)
- 현재 범위 내에서 점프 가능한 최대 위치를 갱신
- 한 번의 순회(O(N))로 해결 가능
코드 풀이#
Python#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| def jump(nums):
n = len(nums)
jumps = 0 # 점프 횟수
farthest = 0 # 현재까지 도달할 수 있는 가장 먼 위치
end = 0 # 현재 점프에서 도달할 수 있는 최대 범위
for i in range(n - 1):
farthest = max(farthest, i + nums[i]) # 최대 도달 범위 갱신
if i == end: # 현재 범위를 벗어나기 직전이면 점프
jumps += 1
end = farthest # 새로운 점프 범위 설정
return jumps
|
Javascript#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| var jump = function(nums) {
let jumps = 0;
let farthest = 0;
let end = 0;
for (let i = 0; i < nums.length - 1; i++) {
farthest = Math.max(farthest, i + nums[i]);
if (i === end) {
jumps++;
end = farthest;
}
}
return jumps;
};
|
참고 및 출처#
programmers Coding Test
LeetCode - The World’s Leading Online Programming Learning Platform