Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Oracle SQL
- 카카오프로젝트
- 보안뉴스
- 자바스크립트 jQuery
- 자바스크립트 element api
- javascript
- 파이썬
- 자바스크립트 prototype
- 카카오프로젝트 100
- 자바스크립트 기본 문법
- oracle db
- 보안뉴스 한줄요약
- php
- 카카오프로젝트100
- 자바스크립트
- ES6
- 자바스크립트 API
- 보안뉴스한줄요약
- 보안뉴스요약
- 보안뉴스 요약
- 자바스크립트 객체
- 깃허브
- numpy
- GIT
- 오라클
- python
- 랜섬웨어
- oracle
- 다크웹
- 자바스크립트 node
Archives
- Today
- Total
FU11M00N
[LeetCode] Jump Game - Javascript 본문
Jump Game
[요소의 수만큼 점프하기]
제약 조건
1 <= prices.length <= 3 * 10^4
0 <= prices[i] <= 10^4
Example
ex1) Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
ex2) Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.
초기 접근 방식
항상 맨 처음 주어진 테스트 케이스 2~3개만 통과하자는 마음으로 문제를 풀기에,
맨 마지막 배열을 기준으로 배열 인덱스의 값 중 "0"이 있는지 확인하고 0이 존재하지 않으면 true를 반환하고
"0"이 존재하면 0인덱스의 위치와 배열의 마지막 인덱스의 거리를 비교해 그 수와 큰지 비교하는 방식으로 접근을 했다.
초기 전체코드
/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function (nums) {
let target = nums.length - 1;
let cnt = 0;
for (let i = target - 1; i >= 0; i--) {
if (nums[i] === 0) {
cnt++;
} else {
if (nums[i] > cnt) {
return true;
} else {
return false;
}
}
return false;
}
return true;
};
해당 코드로 주어진 아래의 testcase 2개를 통과하여 제출을 했다.
ex1) Input: nums = [2,3,1,1,4]
Output: true
Explanation: Jump 1 step from index 0 to 1, then 3 steps to the last index.
ex2) Input: nums = [3,2,1,0,4]
Output: false
Explanation: You will always arrive at index 3 no matter what. Its maximum jump length is 0, which makes it impossible to reach the last index.
다시 생각 해보며..
하지만 전체의 172개의 testcase 중 130개만 통과를 하여, 코드에 문제가 있음을 느꼈다.
먼저 실패한 testcase는 아래와 같다.
ex3) Input: nums = [0,2,3]
Output: false
그렇다,, 이 방식대로 풀이를 하면 배열 인덱스 0번째에 값이 0이거나 인덱스의 값들이 0,1,0,1,4와 같이 되어있으면
점프를 해보지도 못하고 false를 반환한다.
solve 전체 코드
var canJump = function (nums) {
let max = 0;
for (let i = 0; i < nums.length; i++) {
if (i > max) {
return false;
}
max = Math.max(nums[i] + i, max);
}
return true;
};
생각을 다르게 해서 배열의 첫 번째 인덱스부터 시작해 현재 반복문 지점 i와 max 값을 비교해
현재 인덱스 번호가 더 크다면 flase를 반환한다.
만약 i가 max보다 크다면 도달하지 못하는 곳이 되기 때문이다.
아니라면 현재 인덱스의 값과 i를 더해 max 값을 선별한다. 즉 max 값은 최대 어느 인덱스까지 점프를 할 수 있는지 계속 저장하는 것이다.
반복문을 모두 수행했음에도 i가 max보다 더 큰 경우가 없다면 true가 되기에 그때 리턴을 한다.
'알고리즘' 카테고리의 다른 글
[LeetCode] Two Sum II - Input Array Is Sorted - Javascript (0) | 2023.08.27 |
---|---|
[LeetCode] Valid Palindrome - Javascript (0) | 2023.08.27 |
[LeetCode] Best Time to Buy and Sell Stock II - Javascript (0) | 2023.08.25 |
[LeetCode] Best Time to Buy and Sell Stock - Javascript (0) | 2023.08.25 |
[LeetCode] Rotate Array - Javascript (0) | 2023.08.24 |
Comments