해당 포스팅은 릿코드 189번 Rotate Array 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 투포인터 문제이다.
Given an array, rotate the array to the right by k steps, where k is non-negative.
주어진 배열을 오른쪽으로 k 단계만큼 회전시킨다.
이 때 k는 음이 아닌 정수이다.
문제에서 투포인터로 풀라고 명시(O(1) extra space)되어 있어서 풀어보려고 했으나 실패...ㅜ 투포인터로 푼 다른 사람의 풀이를 정리하고자 한다. 어메이징한 풀이 😲😱
/**
* @param {number[]} nums
* @param {number} k
* @return {void} Do not return anything, modify nums in-place instead.
*/
var rotate = function(nums, k) {
// k가 nums 크기보다 클 수 있으므로 연산 축소
k = k % nums.length;
revert(nums, 0, nums.length-1);
revert(nums, 0, k-1);
revert(nums, k, nums.length-1);
return nums;
};
function revert(nums, s, e) {
while (s < e) {
const tmp = nums[s];
nums[s++] = nums[e];
nums[e--] = tmp;
}
}