Given an array, rotate the array to the right by k steps, where k is non-negative.
입출력 예
Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
k 만큼 오른쪽으로 회전하는 문제이고 별도의 메모리를 할당하면 안되기 때문에 배열을 따로 생성하지 않고 문제를 풀어야한다.
첫번째 방법
간단하게 push, pop같은 메소드를 사용?
for문을 이용하여 마지막 요소를 배열의 앞부분을 넣고 (push 대신 unshift를 이용) pop으로 마지막 요소를 삭제하는 것을 k번 반복한다.
두번째 방법
splice를 이용하는 방법
역시 unshift를 이용하여 뒤에서 k개의 요소를 가져오고 splice를 이용하여 뒤를 삭제해주는 방법 전체적인 느낌은 첫번째 방법과 동일하다. 대신 반복을 안돌려도 된다는...
그러나 splice는 아무 값도 제거하지 않았으면 빈 배열을 반환하기 때문에 k가 0일 경우를 예외처리 해줘야한다.
var rotate = function(nums, k) {
// 2.splice를 이용하는 방법
if(!k){
return ;
}
nums.unshift(...nums.slice(-k));
nums.splice(-k);
/*
// 1. for, 간단하게 push, pop같은 메소드를 사용?
for(let i = 0; i < k; i++){
nums.unshift(nums[nums.length - 1])
nums.pop();
}
*/
};