상세 컨텐츠

본문 제목

[LeetCode] 189. Rotate Array (Python3)

카테고리 없음

by 루비해 2022. 5. 1. 03:17

본문

Description

Given an array, rotate the array to the right by k steps, where k is non-negative.

풀이

먼저 in-place 알고리즘의 의미를 알아야 해당 문제를 풀 수 있다. (링크 추후 추가)

k값을 기준으로 리스트 슬라이싱을 하면 쉽게 풀리는데, 이때 단순히 이것만 생각하고 코딩을 하면 문제가 발생한다.

리스트 길이 때문에 답이 [1]이 아닌 [1, 1]로 나오는 등의 경우를 볼 수 있는데, 이를 방지하기 위해 k만 사용하는 것이 아닌 len(nums)를 이용하면 정확한 길이까지 세팅할 수 있다.

마지막으로, 파이썬 고인물들의 스킬로 [:]를 사용하면 in-place로 알고리즘을 구현할 수 있다. ~나도 이제 고인물~ 대부분의 코딩 언어들은 컴파일 전에 임의 값을 할당하는데 (c언어에서는 변수 선언 시 무조건 변수형-int 등을 선언해야 함) 파이썬은 컴파일 이후 값을 할당하기 때문에 nums[:]를 하면 예쁘게 in-place로 값을 할당할 수 있다.

코드


class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        nums[:] = nums[-k % len(nums):] + nums[:-k % len(nums)]