정수형 배열 nums을 k번 오른쪽으로 회전시키면 되는 문제다.
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
if(nums.length === 1) return;
if(k === 0) return;
let arr = JSON.parse(JSON.stringify(nums));
let temp = k % arr.length;
let idx = arr.length - temp;
for(let i = 0; i < arr.length; i++){
nums[i] = arr[(idx+i) % arr.length];
}
};
그냥 원소를 한 칸씩 밀기엔 시간복잡도가 O(nums.length * k) 이 되기 때문에
원본 배열을 복사해두고k
가nums.length
보다 클 경우(k % nums.length)
번 회전한 결과와 같기에k
는nums.length
로 나눈 나머지로 바꿨다.
Example 1
와Example 2
를 보면output
이 원본 배열의nums.length - k
번째부터 하나씩 넣은 결과와 같이 때문에 이 점에 초점을 두고nums
의 원소를 변경했다.
arr를 참조하면서 IndexOutOfBoundsException가 일어나지 않게 arr.length로 나눈 나머지를 넣었다.