๐Ÿ’ซ ETC/Leetcode

Week 1-1. [Array / String] 55. Jump Game

ming412 2023. 8. 24. 23:33

๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •

โœ๏ธ ๋‚˜๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ ์ •๋ฆฌํ•˜๊ธฐ (=์ฒด๊ณ„ํ™”)

https://leetcode.com/problems/jump-game/?envType=study-plan-v2&envId=top-interview-150 

 

Jump Game - LeetCode

Can you solve this real interview question? Jump Game - You are given an integer array nums. You are initially positioned at the array's first index, and each element in the array represents your maximum jump length at that position. Return true if you can

leetcode.com

๋ฐฐ์—ด์˜ ๊ฐ ์œ„์น˜์—์„œ์˜ ์ตœ๋Œ€ ์ ํ”„ ๊ธธ์ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด true, ์—†์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ผ.
  • ์ž…๋ ฅ
    • nums | int arrray := ๊ฐ ์ธ๋ฑ์Šค์—์„œ ์ตœ๋Œ€ ์ ํ”„ ๊ธธ์ด, | nums | ∈ [1, 10^4]
  • ์ถœ๋ ฅ
    • isReachable | boolean := ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋„๋‹ฌ ์—ฌ๋ถ€
  • ์กฐ๊ฑด
    • | nums[i] | ∈ [0, 10^5]

 

๐Ÿ”Ž ์–ด๋–ค ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”๊ฐ€?

๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ์–ด๋–ค ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผํ•  ์ง€ ๋ง‰๋ง‰ํ–ˆ๋‹ค.

๊ฐ ๋ฐฐ์—ด์— ๋‹ด๊ธด ์ˆ˜๋Š” ๋‹จ์ˆœํžˆ ์ ํ”„ ๊ฑฐ๋ฆฌ๊ฐ€ ์•„๋‹Œ, "์ตœ๋Œ€" ์ ํ”„ ๊ฑฐ๋ฆฌ์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฃผ์–ด์ง„ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋ณด๋ฉฐ ๊ณฐ๊ณฐํžˆ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€, ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ์™€ ๋งจ ๋งˆ์ง€๋ง‰ ์‚ฌ์ด์˜ ๊ฐ’๋“ค ์ค‘ 0์ด ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ๋งจ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

 

์ด ๋ฐฉ๋ฒ•์€ "์ตœ๋Œ€" ์ ํ”„ ๊ฑฐ๋ฆฌ๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋๊ธฐ์— ๋ฐ”๋กœ ๊ตฌํ˜„ํ•ด๋ณด์•˜์œผ๋‚˜ ํžˆ๋“  ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

 

๐Ÿ™ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ: ์ž…๋ ฅ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ

prices์˜ ์ตœ๋Œ€ ๊ธธ์ด๊ฐ€ 10,000์ด๋ฏ€๋กœ ์ด์ค‘ for๋ฌธ๊นŒ์ง€ ์•„์Šฌ์•„์Šฌํ•˜๊ฒŒ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋œ๋‹ค.

๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋‹จ์ผ for๋ฌธ๋งŒ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์ง€๋งŒ.

 

๐Ÿ“ ์˜์‚ฌ ์ฝ”๋“œ

isReachable = true // ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ฒดํฌ
for (0; (nums๊ธธ์ด-1)๊นŒ์ง€; 1์”ฉ ์ฆ๊ฐ€) {
	if (nums[i]๊ฐ€ 0์ด๋ผ๋ฉด) {
    	isReachable์— false ๋Œ€์ž…
    }
}
isReachable ๋ฐ˜ํ™˜

 

๐ŸŽฏ ๊ตฌํ˜„ ์ฝ”๋“œ

์•„๋ž˜ ์ฝ”๋“œ๋Š” ๊ณต๊ฐœ ์ผ€์ด์Šค๋Š” ํ†ต๊ณผํ•˜์ง€๋งŒ ํžˆ๋“  ์ผ€์ด์Šค๊นŒ์ง€๋Š” ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค.

class Solution {
    public boolean canJump(int[] nums) {
        boolean isReachable = true;
        for (int i=0; i<nums.length-1; i++) {
            if (nums[i] == 0) {
                isReachable = false;
            }
        }
        return isReachable;
    }
}

 

๋‚ด ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•ด๋ณด๊ธฐ

โฑ ์„ฑ๋Šฅ ์ธก์ • (์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„)

๋‹จ์ผ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

 

โœ๏ธ ์„ฑ๋Šฅ ํšŒ๊ณ 

N์€ ์ตœ๋Œ€ 10,000์ด๋ฏ€๋กœ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„์ด๋‹ค.

 

๋ณดํ†ต 1์ดˆ ์ œํ•œ์ด๋ผ๊ณ  ํ•  ๋•Œ, O(N)์€ ์•ฝ 1์–ต๊นŒ์ง€ O(N^2)์€ ์•ฝ 1๋งŒ๊นŒ์ง€ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ 2์ค‘ for๋ฌธ๊นŒ์ง€๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก ๋ฌด์—‡์„/์–ด๋–ป๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

nums๊ฐ€ [2, 0, 0]์œผ๋กœ ์ฃผ์–ด์งˆ ๋•Œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๊ฐ’๊ณผ ๋งˆ์ง€๋ง‰ ๊ฐ’ ์‚ฌ์ด์— 0์ด ์žˆ์Œ์—๋„ ๋งˆ์ง€๋ง‰ ๊ฐ’์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ฃผ์–ด์ง„ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ํƒ๊ตฌํ•ด๋ณด๊ธฐ

๐ŸŽฏ ๊ตฌํ˜„ ์ฝ”๋“œ

nums ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋จผ ์ธ๋ฑ์Šค(reachable)๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

๊ณ„์†ํ•ด์„œ ์ˆœํšŒํ•˜๋‹ค๊ฐ€ reachable์ด i๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค๋ฉด ๋”์ด์ƒ ์ „์ง„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

class Solution {
    public boolean canJump(int[] nums) {
        int reachable = 0; // ๊ฐ ๋‹จ๊ณ„์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋จผ ์ธ๋ฑ์Šค
        for (int i=0; i<nums.length; i++) {
            if (i > reachable) { // ๋„๋‹ฌํ•  ์—†๋Š” ์ธ๋ฑ์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด false ๋ฐ˜ํ™˜
                return false;
            }
            // โœ… ๊ฐ ๋‹จ๊ณ„์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋จผ ์ธ๋ฑ์Šค๋ฅผ ์ถ”์ ํ•œ๋‹ค.
            reachable = Math.max(reachable, i+nums[i]);
        }
        // ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์™”๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
        return true;
    }
}

 

โฑ ์„ฑ๋Šฅ ์ธก์ • (์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„)

๋‹จ์ผ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด๋‹ค.

 

๋А๋‚€ ์ 

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ๋˜ ์ด์œ ๋Š”, "๋งŒ์•ฝ nums[0]์ด 3์ด๋ผ๋ฉด 1์นธ ์ ํ”„, 2์นธ ์ ํ”„, 3์นธ ์ ํ”„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๋‚˜๋ˆ„์–ด์•ผ ํ•˜๋‚˜?" ๋ผ๋Š” ๊ณ ๋ฏผ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

i๋กœ nums๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋จผ ์ธ๋ฑ์Šค๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ , ์ด๋ฅผ i์™€ ๋น„๊ตํ•˜์—ฌ ๋” ์ด์ƒ ์ „์ง„ํ•  ์ˆ˜ ์—†๋Š” ์ˆœ๊ฐ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.