189. Rotate Array

haaaalin·2023년 8월 23일
0

LeetCode

목록 보기
6/31

문제 링크: https://leetcode.com/problems/rotate-array/description/

주어진 조건

  • 정수 배열 nums

문제

  • 정수 배열 nums를 k번 오른쪽으로 회전시키자

나의 풀이

배열을 k번 오른쪽으로 회전하게 되면, 원래 배열 형태의 왼쪽과 오른쪽을 잘라 위치를 바꾸어 붙인 형태가 된다. (ex. [1, 2, 3, 4, 5, 6, 7] 3번 회전→ [5, 6, 7, 1, 2, 3, 4] )

그렇다면, k를 nums의 길이로 나눈 나머지를 이용해 배열을 slicing 해서 붙이면 되지 않을까? 라는 생각으로 구현하게 되었다.

  • k를 nums의 length로 나누어 k를 다시 구한다
  • k를 이용해, nums를 slicing해 왼쪽 부분 배열과 오른쪽 배열을 구한다
  • 이어붙인 후, nums에 다시 할당한다.

구현 코드

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        k = k % len(nums)
        answer = []
        left = nums[len(nums)-k:]
        right = nums[:len(nums)-k]

        answer = left + right
        nums.clear()
        nums.extend(answer)


다른 풀이

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        k = k % len(nums)
        nums[:] = nums[-k:] + nums[:-k]

이 풀이는 나의 코드에서 불필요한 메모리 할당을 줄였기 때문에, 속도와 메모리 측면에서 더 좋은 결과가 나왔다.

하지만 nums[:] = nums[-k:] + nums[:-k] 여기에서는 어쩔 수 없이 nums[-k:]를 위한 임시 리스트와 nums[:-k]를 위한 임시 리스트의 메모리 할당이 있기 때문에, 공간 복잡도는 여전히 O(1)을 달성하지 못했다.

코테는 속도가 더 중요하다고 생각하므로, 이 풀이가 좀 더 적합한 것 같다.

profile
한 걸음 한 걸음 쌓아가자😎

0개의 댓글