LeetCode 189

HJ seo·2022년 10월 2일
0

Coding Test(Python)

목록 보기
34/45

문제 링크

문제 설명.

주어진 list를 cyclic queue처럼 오른쪽으로 k 번 순환해달라고 하는 문제.

input으로 nums(list)와 k가 주어진다.

example input :

[1,2,3,4,5,6,7]
3

example output :

[5,6,7,1,2,3,4]

문제점.

분명 풀었는데 이게 왜 정답이 안되는지 모르겠다.

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

맨 아랫줄의 주석을 풀어서 코드를 돌려보면 결과는 분명 정확하게 나온다.(길이로 k를 나눈 나머지로 이어붙이는 것이니 뭐..) 그런데 output을 살펴보면 nums가 수정되지 않고, 그대로 output으로 튀어나오는데 이왜?가 저절로 나온다.
타인의 코드를 살펴보면 list를 복사해서 원소를 하나씩 붙여넣는 식의 코드를 쓰던데 이를 생각해보면 아마 스택과 변수의 문제인 것 같다는 추측이 되긴 하지만 어떻게 쓰면 subside 목표인 O(1)의 메모리 사용으로 이를 해결할 수 있을지는 모르겠다.

풀이 코드.

class Solution:
    def rotate(self, nums: List[int], k: int) -> None:
        leng = len(nums)
        if leng <= 1 or k == 0 or k == leng:
            return nums
        
        k = k%leng
        nums[:] = nums[-k:] + nums[:leng-k]

혹시? 하면서 [:]를 추가하고 이 때 몇몇 예외가 있어서 이에 대한 사항을 수정해줬더니 정답이다.. 일반적인 listlist[:]는 어떤 차이가 있을지를 찾아볼 필요가 있겠다.(그런데 어디서 찾아봐야하지..;;)


포인터와 관련된 이유가 원인이었다. python에서는 생전 신경을 쓰지 않을 문제였을 줄 알았는데 그 개념에 대해 공부를 할 필요가 있어보인다.(python에서의 작동방식까지..!)

profile
다양한 분야에 관심이 많은 초보 개발자 입니다.

0개의 댓글