지문은 링크에서 확인해주세요.
본 문제는 해결하지 못했습니다.
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
for(let from = k + 1; from < nums.length; from++) {
const to = (from + k) % nums.length;
[nums[from], nums[to]] = [nums[to], nums[from]]
}
};
Example 1에서 4, 5, 6번째 인덱스의 요소가 0, 1, 2번째 인덱스의 요소와 교체되도록 하였습니다. 하지만 3번째 인덱스는 swap 될 것이 없으므로 타당한 풀이가 되지 못합니다.
Input :nums = [1,2,3,4,5,6,7], k = 3
Output : [5,6,7,4,1,2,3]
Expected : [5,6,7,1,2,3,4]
링크의 영상을 참고하였습니다.
var rotate = function(nums, k) {
k = k % nums.length;
nums.reverse();
swapNums(nums, 0, k - 1);
swapNums(nums, k, nums.length - 1);
};
var swapNums = function(nums, start, end) {
while(start < end) {
[nums[start], nums[end]] = [nums[end], nums[start]];
start += 1;
end -= 1;
}
}
nums([1, 2, 3, 4, 5, 6, 7]
)를 뒤집습니다 ([7, 6, 5, 4, 3, 2, 1]
). k를 기준으로 배열의 범위를 나눈 뒤, 각 범위 내에서 swap하는 풀이입니다.