🧮

Rotate Array

Rotate Array - Explanation

보통 알고리즘 O(n) O(n)

Problem Summary

Write a function that rotates an array to the right by k steps.

Go to Problem →

Detailed Explanation

이 문제는 **배열 회전** 알고리즘과 **음수 인덱스**를 활용한 slice 사용법을 학습합니다. **오른쪽 회전이란?** 배열의 마지막 k개 요소를 앞으로 이동시킵니다: [1, 2, 3, 4, 5]를 2칸 오른쪽 회전 → [4, 5, 1, 2, 3] **slice의 음수 인덱스** - `arr.slice(-k)`: 마지막 k개 요소 - `arr.slice(0, -k)`: 처음부터 마지막 k개 전까지 **[1, 2, 3, 4, 5], k=2 처리** - arr.slice(-2) → [4, 5] - arr.slice(0, -2) → [1, 2, 3] - 합치기: [4, 5, 1, 2, 3] **k % n의 중요성** k가 배열 길이보다 클 수 있습니다. n번 회전하면 원래대로 돌아오므로: - k=7, n=5 → 7 % 5 = 2 (실제 회전 횟수) - k=4, n=2 → 4 % 2 = 0 (원래 상태 유지) **k가 0인 경우** slice(-0)은 빈 배열이 아니라 전체 배열을 반환합니다. 특수 처리가 필요할 수 있습니다. **in-place 회전 (대안)** 공간을 절약하려면 세 번의 reverse로 구현할 수 있습니다: 1. 전체 뒤집기: [5,4,3,2,1] 2. 앞 k개 뒤집기: [4,5,3,2,1] 3. 나머지 뒤집기: [4,5,1,2,3]

Solution Code

solution.js
function rotate(arr, k) {
  const n = arr.length;
  k = k % n;
  return [...arr.slice(-k), ...arr.slice(0, -k)];
}

Key Concepts from This Problem

1. 배열 회전
2. 음수 인덱스
3. 모듈로 연산
4. slice 메서드

Common Mistakes

k가 배열 길이보다 클 때 k % n으로 정규화해야 합니다
slice(-0)은 빈 배열이 아닌 전체 배열입니다
왼쪽 회전과 오른쪽 회전을 혼동하지 마세요

Hints

Hint 1: slice를 사용해 배열을 두 부분으로 나누세요.
Hint 2: k가 배열 길이보다 클 수 있습니다.

Complexity Analysis

Time Complexity

O(n)

Grows linearly with input size

Space Complexity

O(n)

Uses memory proportional to input size

Related Tags

#알고리즘 #배열 #회전