Skip to content

Jump Game #55

Description

@hsskey

문제 설명 | Jump Game

정수 배열 nums가 주어집니다. 처음에는 배열의 첫 번째 인덱스에 위치하며, 배열의 각 요소는 해당 위치에서 최대 점프 길이
마지막 인덱스에 도달할 수 있으면 true를, 그렇지 않으면 false를 반환

📝 제약조건

  • 1 <= nums.length <= 10^4
  • 0 <= nums[i] <= 10^5

💡 예시

  • Input: nums = [2,3,1,1,4]

    • Output: true
    • 설명: 인덱스 0에서 1으로 1단계 점프한 다음, 3단계를 점프하여 마지막 인덱스에 도달
  • Input: nums = [3,2,1,0,4]

    • Output: false
    • 설명: 무엇을 하든 항상 인덱스 3에 도달합니다. 최대 점프 길이는 0이므로 마지막 인덱스에 도달할 수 없음

문제 해결 과정

Step 1: 문제 이해하기

  • 작은 예시로 직접 점프 게임 이해하기
    • [2,3,1,1,4]에서:
      • 인덱스 0에서 시작, 최대 2칸 점프 가능 → 인덱스 1 또는 2로 갈 수 있음
      • 인덱스 1로 가면 최대 3칸 점프 가능 → 바로 마지막 인덱스(4)에 도달 가능
    • [3,2,1,0,4]에서:
      • 인덱스 0에서 시작, 최대 3칸 점프 가능 → 어디를 가든 결국 인덱스 3에 도달
      • 인덱스 3의 값은 0이므로 더 이상 점프할 수 없음 → 마지막 인덱스 도달 불가

Step 2: 접근 방법

  • 직관적으로 생각하기

    • 처음엔 앞에서부터 접근할 수 있다고 생각하겠지만, 뒤에서부터 접근하는 방식이 효율적
    • 마지막 인덱스에서 시작해 첫 번째 인덱스까지 역순으로 진행
    • 목표 인덱스(goal)에 도달할 수 있는 위치를 계속 업데이트
  • 알고리즘 표 작성

goal = 마지막 인덱스 (nums.length - 1)
↓
i = 마지막 인덱스부터 0까지 역순으로 순회
↓
현재 위치(i)에서 nums[i]만큼 점프 가능
↓
i + nums[i] >= goal인지 확인
↓
맞다면 → goal = i (목표 지점 업데이트)
아니면 → 다음 인덱스로 이동
↓
최종적으로 goal이 0이면 성공 (처음부터 끝까지 도달 가능)

Step 3: 코드 설계

  1. 목표 인덱스(goal)를 마지막 인덱스로 초기화
  2. 마지막 인덱스부터 0까지 역순으로 순회:
    • 현재 위치에서 최대 점프로 목표에 도달 가능한지 확인
    • 가능하다면 목표 위치를 현재 위치로 업데이트
  3. 최종적으로 목표가 첫 번째 인덱스(0)인지 확인

Step 4: 코드 구현

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var canJump = function(nums) {
    // 목표 인덱스를 마지막 인덱스로 초기화
    let goal = nums.length - 1;
    
    // 뒤에서부터 앞으로 순회
    for(let i = nums.length - 1; i >= 0; i--) {
        // 현재 위치에서 점프하여 목표에 도달할 수 있는지 확인
        if(i + nums[i] >= goal) {
            // 가능하다면 목표를 현재 위치로 업데이트
            goal = i;
        }
    }
    
    // 목표가 첫 번째 인덱스라면 성공
    return goal === 0;
};

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions