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 |
Tags
- 깃허브
- Oracle SQL
- 카카오프로젝트
- 자바스크립트
- 오라클
- 자바스크립트 node
- 보안뉴스한줄요약
- 카카오프로젝트100
- 보안뉴스 요약
- numpy
- 자바스크립트 prototype
- 자바스크립트 기본 문법
- oracle db
- python
- 파이썬
- 보안뉴스요약
- 자바스크립트 객체
- GIT
- 자바스크립트 element api
- php
- 다크웹
- 보안뉴스
- oracle
- 자바스크립트 jQuery
- 랜섬웨어
- 카카오프로젝트 100
- javascript
- ES6
- 자바스크립트 API
- 보안뉴스 한줄요약
Archives
- Today
- Total
FU11M00N
[LeetCode] Rotate Array - Javascript 본문
Rotate Array
[배열 순환]
제약 조건
1 <= nums.length <= 10^5
-23^1 <= nums[i] <= 23^1 - 1
0 <= k <= 10^5
Example
ex1) Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
ex2) Input: nums = [-1,-100,3,99], k = 2
Output: [3,99,-1,-100]
초기 문제 접근 방식
먼저 반복문은 k의 값만큼 순회하고 splice를 사용해 기존의 배열은 유지한 채로,
k 값을 기준으로 해당 위치에 있는 값을 배열의 맨 앞으로 이동시킨다.
그 후 해당 인덱스는 배열에서 삭제하는 방법을 생각했다.
그럼 반복문 i가 0일 땐,
[1,2,3,4,5,6,7] -> [5,1,2,3,4,6,7]으로 변경되며
k를 1씩 감소하며 나머지 뒤에 있는 배열도 앞으로 옮기는 작업을 한 것이다.
초기 전체코드
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function (nums, k) {
let l = k
for (let i = 0; i < l; i++) {
nums.splice(i, 0, nums[nums.length - k]);
nums.splice(nums.length - k, 1);
k--;
}
};
해당 코드로 주어진 아래의 testcase 2개를 통과하여 제출을 했다.
ex1) Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
ex2) Input: nums = [-1,-100,3,99], k = 2
Output: [3,99,-1,-100]
다시 생각 해보며..
하지만 전체의 38개의 testcase 중 27개밖에 통과를 하지 못했고, 해당 코드에 문제가 있음을 인지했다.
먼저 실패한 testcase는 아래와 같다.
ex3) Input: nums = [1,2], k= 3
Output: [2,1]
그렇다.. nums 배열의 인덱스 개수보다 k가 클 경우가 존재하는거다.
내가 작성한 코드는 k는 nums의 배열보다 작을 경우를 생각 해 작성 한 코드이기에 다른 테스트 케이스를 통과하지 못한것이다.
solve 전체 코드
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function (nums, k) {
let tmp = nums.splice(-(k % nums.length));
nums = nums.splice(0, 0, ...tmp);
};
k가 nums.length 보다 클 경우도 고려하여 나머지 값을 사용했다.
nums.splice(-(k % nums.length));
k와 nums.length의 나머지 연산을 수행해 나머지 값만큼 배열을 잘라낸다.
만약 splice(-1)을 넣으면 배열의 뒤부터 1개를 잘라내는 의미이다.
nums = nums.splice(0, 0, ...tmp);
그 후 배열을 앞에서부터 이어붙이는 것이다.
다른 sovle 코드
var rotate = function(nums, k) {
for(let i = 0; i < k; i++) {
const pop = nums.pop();
nums.unshift(pop);
}
};
반복문을 k 만큼 순회하며 배열의 맨 뒤부터 pop을 하며
unshift를 사용해 앞에서부터 이어 붙이는 방법도 존재한다.
'알고리즘' 카테고리의 다른 글
[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] Majority Element - Javascript (0) | 2023.08.24 |
[LeetCode] Remove Duplicates from Sorted Array II - Javascript (0) | 2023.08.24 |
[LeetCode] Remove Duplicates from Sorted Array - Javascript (0) | 2023.08.23 |
Comments