Leetcode/Top 100 Liked

[Misc][Medium] 189. Rotate Array

자전거통학 2024. 4. 28. 03:19

https://leetcode.com/problems/rotate-array/description

 

Q. 정수배열 nums가 주어질 때, k 만큼 배열을 rotate하여라.

 추가 메모리를 사용하지 말아라. 

 

 

Solution. 

 고전과도 같은 문제이다. 

 

 추가 메모리를 사용할 수 있다면, 간단하다. 

 오프셋 k 만큼 이동시켜 새 버퍼에 쓰면 된다. 

 

 추가 메모리를 쓰지 않으므로, 다른 접근이 필요하고, 이에 대해 알려진 알고리즘을 쓴다. 

 

 배열 전체를 reverse한다. 

 앞에서 k 개 만큼 reverse한다. 

 이후 위치에서 array.Length - k 만큼 reverse한다. 

 

 이것이 결과가 된다. 

 

 만약 문제 질의가 left로 회전하지 않고 right로 회전한다면 어떨까?

 그 경우도 약간의 응용으로 해결 가능하다. 

 

 배열 전체를 reverse한다.

 뒤에서 k개 만큼 reverse한다. 

 처음부터 array.Length-k 만큼 reverse한다.

 

 코드는 로직대로 간단하다. 

 

 다만 k는 배열 길이로 정규화 할 필요가 있다.

public void Rotate(int[] nums, int k) 
{
    k %= nums.Length;
    Array.Reverse(nums, 0, nums.Length);
    Array.Reverse(nums, 0, k);
    Array.Reverse(nums, k, nums.Length-k);
}

 

 

적절한 결과.

'Leetcode > Top 100 Liked' 카테고리의 다른 글

[LinkedList][Medium] 86. Partition List  (0) 2024.05.27
[Misc][Easy] 136. Single Number  (0) 2024.04.27
[Misc][Medium] 75. Sort Colors  (0) 2024.04.27
[Misc][Medium] 56. Merger Intervals.  (0) 2024.04.27
[Stack][Easy] 20. Valid Parentheses  (0) 2024.04.21