55. Jump Game

2025. 10. 15. 17:33·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 55

풀이 날짜: 2025/10/15

 

 

1. 문제 이해

각 인덱스의 값은 그 위치에서 최대 몇 칸까지 점프할 수 있는지를 의미한다.

배열의 시작점에서 출발해 마지막 인덱스까지 도달 가능한지 여부를 true 또는 false로 반환하는 문제다.

 

예시:

입력: [2,3,1,1,4]
출력: true   // 0→1→4 로 이동 가능
입력: [3,2,1,0,4]
출력: false  // 인덱스 3에서 멈춤

 

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

이 문제는 모든 가능한 경로를 탐색할 필요가 없다. 중요한 건 “지금 위치에서 갈 수 있는 가장 먼 거리”가 어디인지뿐이다.

 

즉, 매 순간 현재까지 내가 도달할 수 있는 가장 멀리 있는 지점이 어디인가만 추적하면 된다. 이 접근이 Greedy(탐욕적)인 이유는, 매 단계에서 “가장 유리한 선택(= 가장 멀리 갈 수 있는 선택)”만 고려해도 결국 전체 문제를 해결할 수 있기 때문이다.

 

예를 들어,[2,3,1,1,4]에서 처음 위치(0)에서는 2칸까지 이동할 수 있다. 다음 인덱스(1)로 가면 3칸을 더 갈 수 있으므로, ‘지금까지 갈 수 있는 가장 먼 거리’는 1 + 3 = 4가 된다. 이 순간, 이미 배열 끝에 도달할 수 있다는 사실이 결정된다.

따라서 “모든 점프 조합”을 고려하지 않아도 “현재 최대로 도달 가능한 범위”만 추적하면 충분하다.

 

3. 풀이코드

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var canJump = function(nums) {    
  let farthest = 0;
  
  for (let i = 0; i < nums.length; i++) {  
    if (i > farthest) return false;               // 현재 위치조차 도달 불가능
    farthest = Math.max(farthest, nums[i] + i);   // 가장 먼 거리 갱신
    if (farthest >= nums.length - 1) return true; // 마지막까지 도달 가능
  }
};

 

  • 시간 복잡도: O(n) — 한 번의 순회로 끝
  • 공간 복잡도: O(1) — 추가 메모리 거의 없음

 

4. 핵심 정리

개념 설명
핵심 아이디어 “현재까지 도달 가능한 최대 거리”를 추적한다
왜 Greedy인가 매 순간 가능한 최선(가장 멀리 가는 선택)을 하면 전체 최적 결과가 보장된다
효율성 DP보다 빠르고, 중복 계산이 없음
실패 조건 현재 인덱스가 도달 가능한 거리보다 클 경우 → 즉시 false

 

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

209. Minimum Size Subarray Sum  (0) 2025.10.19
45. Jump Game II  (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
189. Rotate Array  (0) 2025.10.15
'Coding Test/LeetCode' 카테고리의 다른 글
  • 209. Minimum Size Subarray Sum
  • 45. Jump Game II
  • 122. Best Time to Buy and Sell Stock II
  • 80. Remove Duplicates from Sorted Array 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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바