Skip to content

LeetCode 55 - Jump Game

문제 설명

nums 배열이 주어졌을 때, 처음 인덱스에서 시작하여 마지막 인덱스에 도달할 수 있는지 판단하는 문제입니다. 각 원소 nums[i]는 해당 인덱스에서 최대 몇 칸까지 점프할 수 있는지를 의미합니다.

접근 방법 - Greedy (그리디) 방식

핵심 아이디어

  • 매 순간 현재 위치에서 갈 수 있는 최대 거리(maxReach) 를 업데이트합니다.
  • 현재 인덱스가 maxReach보다 크다면 더 이상 앞으로 진행할 수 없으므로 false를 반환합니다.
  • 끝까지 도달하면 true를 반환합니다.

코드

typescript
function canJump(nums: number[]): boolean {
  let maxReach = 0

  for (let i = 0; i < nums.length; i++) {
    if (i > maxReach) return false // 현재 위치에 도달 불가능
    maxReach = Math.max(maxReach, i + nums[i])
    if (maxReach >= nums.length - 1) return true // 마지막 인덱스 도달 가능
  }

  return true
}

시간 및 공간 복잡도

구분복잡도
시간 복잡도O(n)
공간 복잡도O(1)

주요 포인트

  • 최적화된 Greedy 접근법
  • 매 순간 도달 가능한 최대 거리만 신경 쓰는 단순한 로직
  • 조기 종료 조건을 통해 불필요한 연산 최소화