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 ์ ‘๊ทผ๋ฒ•
  • ๋งค ์ˆœ๊ฐ„ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ๋งŒ ์‹ ๊ฒฝ ์“ฐ๋Š” ๋‹จ์ˆœํ•œ ๋กœ์ง
  • ์กฐ๊ธฐ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ์ตœ์†Œํ™”