๋ฌธ์ ํด๊ฒฐ ๊ณผ์
โ๏ธ ๋๋ง์ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ์ ๋ฆฌํ๊ธฐ (=์ฒด๊ณํ)
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์ ๋น๊ตํ์ฌ ๋ ์ด์ ์ ์งํ ์ ์๋ ์๊ฐ์ ์ฐพ์ ์ ์์๋ค.
'๐ซ ETC > Leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Week 1-2. [Two Pointers] 167. Two Sum II - Input Array Is Sorted (Java) (0) | 2023.08.28 |
---|---|
Week 1-2. [Two Pointers] 125. Valid Palindrome (Java) (0) | 2023.08.26 |
Week 1-1. [Array / String] 122. Best Time to Buy and Sell Stock II (0) | 2023.08.24 |
Week 1-1. [Array / String] 121. Best Time to Buy and Sell Stock (0) | 2023.08.24 |
Week 1-1. [Array / String] 189. Rotate Array (0) | 2023.08.24 |