Skip to content

Rotate Array #51

@hsskey

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);  
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions