주어진 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]
혹시? 하면서 [:]
를 추가하고 이 때 몇몇 예외가 있어서 이에 대한 사항을 수정해줬더니 정답이다.. 일반적인 list
와 list[:]
는 어떤 차이가 있을지를 찾아볼 필요가 있겠다.(그런데 어디서 찾아봐야하지..;;)
포인터와 관련된 이유가 원인이었다. python에서는 생전 신경을 쓰지 않을 문제였을 줄 알았는데 그 개념에 대해 공부를 할 필요가 있어보인다.(python에서의 작동방식까지..!)