CodingTest/LeetCode

[LeetCode] 189. Rotate Array, Medium

뜸부깅 2025. 3. 13. 14:19
반응형

1. 문제

  • 배열 nums와 정수 k가 주어질 때, 배열을 k번 오른쪽으로 밀었을 때 결과를 nums를 수정하라.

2. 해결

/**
 Do not return anything, modify nums in-place instead.
 */
function rotate(nums: number[], k: number): void {
    let rotate =  k % nums.length;
    
    nums.reverse();

    nums.splice(0, rotate, ...nums.slice(0,rotate).reverse());

    nums.splice(rotate, nums.length - rotate, ...nums.slice(rotate).reverse());
    
};
  • 일단 해결하지 못했다. 좀 더 생각했으면 됐으려나?
  • 힌트를 좀 얻어서 배열 함수중 splice, slice, reverse를 이용해 풀 수 있다.
  • rotate 값은 k가 배열의 길이를 넘어설 때, 어차피 동일한 패턴이 나오기 때문에 사용해야 한다. 예를 들어, 길이가 7인 배열을 7번 돌리면 원래 주어진 배열이 나온다.
  • 해결방법은.
    • 주어진 배열을 뒤집는다. (1, 2, 3, 4, 5, 6, 7 -> 7, 6, 5, 4, 3, 2, 1)
    • 0번 인덱스부터 k 인덱스 까지의 요소를 다시 뒤집는다. (5, 6, 7, 4, 3, 2, 1)
    • k인덱스 부터 마지막 요소까지 뒤집는다. (5, 6, 7, 1, 2, 3, 4)