45. Jump Game II

2025. 10. 15. 21:58·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 45

풀이 날짜: 2025/10/15

 

1. 문제 이해

입력: [2,3,1,1,4]
출력: 2
설명: 0 → 1 → 4 로 2번 점프

배열의 각 원소는 해당 인덱스에서 최대 점프할 수 있는 거리를 의미한다.

배열의 시작점(0)에서 출발해 마지막 인덱스에 도달하기 위한 최소 점프 횟수를 구하는 문제다.

 

2. 접근 방식 — Greedy (탐욕적 접근)

이 문제는 모든 경로를 계산할 필요 없이, “한 번의 점프 내에서 도달할 수 있는 최대 범위”를 이용해 해결할 수 있다.

탐욕적으로 생각하면, “현재 위치에서 한 번 점프할 때, 다음 점프의 최대 도달 가능 범위를 최대로 넓히는 선택” 만 반복하면 최소 점프 횟수를 구할 수 있다.

 

이를 위해 다음 세 가지 변수를 사용한다:

변수 의미
farthest 현재까지 탐색 중 도달할 수 있는 가장 먼 인덱스(모든 인덱스에서 업데이트 해줌)
currentEnd 현재 점프 범위의 끝 인덱스 (이 범위를 넘으면 점프해야 함)
jump 지금까지 점프한 횟수

순회 중 매번 farthest를 갱신하면서, 현재 탐색이 currentEnd에 도달했을 때 점프 횟수를 증가시킨다.

 

3. 풀이코드

/**
 * @param {number[]} nums
 * @return {number}
 */
var jump = function(nums) {
  let farthest = 0;
  let jump = 0;
  let currentEnd = 0;

  // 마지막 칸은 “도착지점”이므로 더 이상 점프 계산 필요 없음 -> i < nums.length - 1
  for (let i = 0; i < nums.length - 1; i++) { 
    farthest = Math.max(i + nums[i], farthest); // 가장 멀리 갈 수 있는 지점
    if (i === currentEnd) {                     // 현재 점프의 끝에 도달
      currentEnd = farthest;                    // 다음 점프 범위 갱신
      jump++;                                   // 점프 횟수 증가
    }
  }

  return jump;
};

이 문제는 “현재 위치에서 갈 수 있는 가장 먼 곳”만 고려해도 되는 구조다.

그 이유는, 한 번의 점프 범위 안에서는 어디서 점프하든 다음 점프의 최대 도달 범위가 같다는 점 때문이다.

 

즉, 어떤 칸에서 점프하든, 그 칸이 현재 점프의 유효 범위(currentEnd) 안에 있다면, 다음 점프 때 고려할 수 있는 “가장 멀리 갈 수 있는 거리(farthest)“는 변하지 않는다. currentEnd 는 farthest 로 업데이트 된다.

 

그래서 탐색 중 i === currentEnd 가 되는 시점은 “현재 점프 범위가 끝났다”는 뜻이다. 이때 다음 점프를 해야만 더 멀리 갈 수 있으므로, 점프 횟수를 1회 증가시키고, currentEnd 를 farthest 로 업데이트 한다.

 

예시 시나리오

nums = [2, 3, 1, 1, 4] 라고 하면, 

단계 i nums[i] farthest currentEnd jump 설명
시작 0 2 2 0 0 0에서 최대 2칸까지 갈 수 있음
점프1 0→2     currentEnd=2 jump=1 첫 점프 범위(0~2)
탐색중 1 3 4 2 1 i=1에서 farthest=4 (다음 점프 시 4까지 가능)
점프2 2 1 4 2 1→2 i가 currentEnd(2)에 도달 → 새로운 점프 필요

즉, i === currentEnd 가 되는 시점은 “지금 점프한 범위의 끝까지 왔으니, 다음 점프를 시작해야 하는 타이밍”을 의미한다. 이 시점에만 점프를 늘리면, 쓸데없는 중복 점프 없이 최소 횟수로 끝까지 도달할 수 있다.

시간 및 공간 복잡도

  • 시간 복잡도: O(n) — 배열을 한 번만 순회
  • 공간 복잡도: O(1) — 추가 공간 거의 없음

 

4. 핵심 정리

개념 설명
문제 유형 Greedy, 배열
핵심 변수 farthest, currentEnd, jump
핵심 아이디어 각 점프 구간 내에서 최대로 도달 가능한 지점을 추적
복잡도 시간 O(n), 공간 O(1)
포인트 “점프 시점”은 탐색 중 i === currentEnd일 때 결정된다

 

'Coding Test > LeetCode' 카테고리의 다른 글

3. Longest Substring Without Repeating Characters  (0) 2025.10.19
209. Minimum Size Subarray Sum  (0) 2025.10.19
55. Jump Game  (0) 2025.10.15
122. Best Time to Buy and Sell Stock II  (0) 2025.10.15
80. Remove Duplicates from Sorted Array II  (0) 2025.10.15
'Coding Test/LeetCode' 카테고리의 다른 글
  • 3. Longest Substring Without Repeating Characters
  • 209. Minimum Size Subarray Sum
  • 55. Jump Game
  • 122. Best Time to Buy and Sell Stock II
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Binary Tree BFS
    DOM
    testing
    커리어
    Data Structure
    Time complexity and Space complexity
    TCP/IP
    이벤트
    indie hacker
    mobile app
    Threads and Multithreading
    Shared resources
    polylingo
    스코프
    Network
    Operating System
    leetcode
    js pattern
    structure of os
    How memory manage data
    딥다이브
    need a database
    Javascript Essentials
    모던 자바스크립트 Deep Dive
    VoiceJournal
    database
    자바스크립트 딥다이브
    프론트엔드 성능 최적화 가이드
    자바스크립트
    CPU scheduling algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
45. Jump Game II
상단으로

티스토리툴바