189. Rotate Array 풀이 - js

fgStudy·2022년 5월 31일
0

코딩테스트

목록 보기
34/69
post-thumbnail

해당 포스팅은 릿코드 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)되어 있어서 풀어보려고 했으나 실패...ㅜ 투포인터로 푼 다른 사람의 풀이를 정리하고자 한다. 어메이징한 풀이 😲😱


로직 설명

  • 처음 nums = [1,2,3,4,5,6,7]
  • nums를 reverse한다. -> nums = [7,6,5,4,3,2,1]
  • nums의 index 0~k를 reverse한다 -> [5,6,7,4,3,2,1]
  • nums의 index k+1~마지막까지를 reverse한다 -> [5,6,7,1,2,3,4]

전체 코드

/**
 * @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;
    }
}
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글