-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
문제설명 | 배열 회전(Array Rotation)
정수 배열 nums를 오른쪽으로 k번 회전시키는 문제입니다. k는 음수가 아닌 정수입니다.
📝 제약조건
1 <= nums.length <= 10^5-2^31 <= nums[i] <= 2^31 - 10 <= 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: 접근 방법
-
직관적으로 생각하기
- k가 배열 길이보다 클 수 있으므로 최적화 필요
- 실제로는 배열 길이로 나눈 나머지만큼만 회전하면 됨
- 뒤에서 k개의 요소를 잘라서 앞에 붙이면 한 번에 해결 가능
-
메모리 사용
- splice()로 배열 자르기
- unshift()로 앞에 붙이기
- 임시 배열 사용하지만 최소화
Step 3: 코드 설계
- k 최적화하기
- k를 배열 길이로 나눈 나머지 구하기
- 뒤에서 k개 요소 자르기
- splice(-k, k)로 마지막 k개 요소 추출
- 자른 요소들을 배열 앞에 추가
- unshift()로 추출한 요소들을 앞에 붙이기
Step 4: 코드 구현
var rotate = function(nums, k) {
// k 최적화
const optimizedK = k % nums.length;
// 뒤에서 k개 요소 자르기
const deletedArr = nums.splice(-optimizedK, optimizedK);
// 자른 요소들을 배열 앞에 추가
nums.unshift(...deletedArr);
};