Given an integer array nums, rotate the array to the right by k steps, where k is non-negative.
nums
행렬k
만큼 오른쪽으로 이동nums
= {1,2,3,4}, k
= 2 일 때, nums
= {3,4,1,2} 로 변형nums.length
<= 10,000nums[i]
<= 2^31 - 1k
<= 10,000k
만큼 이동했을 때 제자리인 경우, 기존 행렬을 변형하지 않는다.initialArray
을 만든다.k
만큼 이동했을 때의 위치에 값을 넣는다.import java.util.*;
class Solution {
public void rotate(int[] nums, int k) {
if (k % nums.length == 0) {
return;
}
int[] initialArray = Arrays.copyOf(nums, nums.length);
for (int i = 0; i < nums.length; i++) {
nums[(i + k) % nums.length] = initialArray[i];
}
}
}
class Solution {
public void rotate(int[] nums, int k) {
int n = nums.length;
k %= n;
reverse(nums, 0, n - k - 1);
reverse(nums, n - k, n - 1);
reverse(nums, 0, n - 1);
}
private void reverse(int[] nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
}
모범 답안 전략
nums
= {1,2,3,4,5,6,7} k
= 3 인 예시가 있다고 해보자k
가 n
보다 크다면 모듈화로 계산해준다 (n은 배열의 크기)0
번째 ~ n-k-1
번째 까지 뒤집는다 => {3,2,1,4,5,6,7}n-k
번째 ~ n-1
번째 까지 뒤집는다. => {3,2,1,7,6,5,4}알게된 점