[Array / String] Rotate Array

Yongki Kim·2023년 10월 19일
0
post-thumbnail

189. Rotate Array

지문은 링크에서 확인해주세요.

1. 해답을 보지 않고 스스로 문제를 해결한 과정

본 문제는 해결하지 못했습니다.

/**
 * @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]

2. 해답을 찾아서 자신이 작성한 알고리즘에 대해서 회고한 내용

해답

링크의 영상을 참고하였습니다.

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하는 풀이입니다.

0개의 댓글