Skip to content

Rotate Array #51

Description

@hsskey

문제설명 | 배열 회전(Array Rotation)

정수 배열 nums를 오른쪽으로 k번 회전시키는 문제입니다. k는 음수가 아닌 정수입니다.

📝 제약조건

  • 1 <= nums.length <= 10^5
  • -2^31 <= nums[i] <= 2^31 - 1
  • 0 <= k <= 10^5
  • in-place 수정: 새로운 배열을 반환하지 않고 주어진 배열을 직접 수정

💡 예시

  • Input: nums = [1,2,3,4,5,6,7], k = 3
    • Output: [5,6,7,1,2,3,4]

문제 해결 과정

Step 1: 문제 이해하기

  • 작은 예시로 직접 회전 과정 살펴보기
    • [1,2,3,4], k = 2 인 경우
    • 1회전: [4,1,2,3]
    • 2회전: [3,4,1,2]
    • 패턴 발견: k번 회전하면 뒤에서 k개의 요소가 앞으로 오게 됨

Step 2: 접근 방법

  • 직관적으로 생각하기

    1. k가 배열 길이보다 클 수 있으므로 최적화 필요
    2. 실제로는 배열 길이로 나눈 나머지만큼만 회전하면 됨
    3. 뒤에서 k개의 요소를 잘라서 앞에 붙이면 한 번에 해결 가능
  • 메모리 사용

    • splice()로 배열 자르기
    • unshift()로 앞에 붙이기
    • 임시 배열 사용하지만 최소화

Step 3: 코드 설계

  1. k 최적화하기
    • k를 배열 길이로 나눈 나머지 구하기
  2. 뒤에서 k개 요소 자르기
    • splice(-k, k)로 마지막 k개 요소 추출
  3. 자른 요소들을 배열 앞에 추가
    • unshift()로 추출한 요소들을 앞에 붙이기

Step 4: 코드 구현

var rotate = function(nums, k) {
    // k 최적화
    const optimizedK = k % nums.length;
    
    // 뒤에서 k개 요소 자르기
    const deletedArr = nums.splice(-optimizedK, optimizedK);
    
    // 자른 요소들을 배열 앞에 추가
    nums.unshift(...deletedArr);  
};

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions