[리트코드] 977, 189




977. Squares of a Sorted Array

리트코드

나의 풀이

/**
 * @param {number[]} nums
 * @return {number[]}
 */
var sortedSquares = function (nums) {
  return nums.map(v => v ** 2).sort((x, y) => x - y);
};

console.log(sortedSquares([-4, -1, 0, 3, 10]));

Runtime: 120 ms, faster than 58.67% of JavaScript online submissions for Squares of a Sorted Array.



189. Rotate Array

리트코드

처음 풀이 (런타임 에러)

var rotate = function (nums, k) {
  while (k) {
    nums.unshift(nums.pop());
    k--;
  }
  return nums;
};

큐처럼 구현하였지만 런타임에러가 났다. (괜히 미디엄이 아닐테지..)



정답 풀이

var rotate = function (nums, k) {
  k = k % nums.length;
  nums.unshift(...nums.splice(nums.length - k, k));
};

옮겨야할 아이들을 통째로 구해다가, 통째로 unshift 해주었다.

정석 풀이

var rotate = function(nums, k) {
  let count = 0;
  for (let i = 0; i < nums.length; i++) {
      let nextIndex = (i + k)%nums.length;
      let previous = nums[i];
      while (1) {
          let temp = nums[nextIndex];
          nums[nextIndex] = previous;
          count++;
          if(nextIndex === i) {
              break;
          }
          previous = temp;
          nextIndex = (nextIndex + k)%nums.length;
      }
      if (count === nums.length) {
          break;
      }
  }
};

마지막 아이와 처음 아이를 바꿔주는 작업을 k번만큼 반복한다.