[leetcode: python] Rotate Array

hotbreakb·2022년 5월 12일
0

algorithm

목록 보기
25/25

Rotate Array

생각한 방식

  1. nums[-3:]에 있는 숫자와 nums[:k]를 switch한다.
  2. 가운데에 있는 숫자의 위치를 바꾸기 위해 뒷부분과 switch한다.
  3. 또 가운데가 남아서 switch한다.

이 방식은 배열의 k <= len(nums)// 2일 때는 답이 되지만, 이 경우가 아닐 때는 계속 swtich를 해야 하기 때문에 매우 비효율적이다.

풀잇법

  1. list reverse
  2. k번째까지 정렬, 나머지 뒷부분 정렬

코드

class Solution:
    def switch(self, nums: List[int], left: int, right: int) -> List[int]:
        while left < right:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
            right -= 1
        
        return nums
    
    def rotate(self, nums: List[int], k: int) -> None:
        k = k % len(nums) # 배열 내에서의 인덱스
        
        # reverse
        left, right = 0, len(nums)-1
        nums = self.switch(nums, left, right)
        
        # left (노란색)
        left, right = 0, k-1
        nums = self.switch(nums, left, right)
        
        # right (초록색)
        left, right = k, len(nums)-1
        nums = self.switch(nums, left, right)

참고 자료

모르면 보고 익히자! 익숙해지면 다 할 수 있어 💪

profile
글쟁이 프론트 개발자, 헬렌입니다.

0개의 댓글