Skip to content

Jump GameΒ #55

@hsskey

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;
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions