본문 바로가기

Leetcode

[Leetcode][Python] 80. Remove Duplicates from Sorted Array II

리트코드 / 파이썬 / 80. Remove Duplicates from Sorted Array II

leetcode.com/problems/remove-duplicates-from-sorted-array-ii/

 

Remove Duplicates from Sorted Array II - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

풀이 방법

파이썬을 사용한다면 어렵지 않은 문제다. 

정렬된 리스트에서, 중복이 2개 이상인 경우 해당 element를 삭제만 해주면 되기 때문이다.

 

파이썬 리스트 element 삭제 관련 함수에는 remove, del, pop 이렇게 세 가지가 있다.

1. remove

remove()는 첫번째 매칭 value/object를 삭제한다. 특정 인덱스에 있는 element 삭제는 불가하다.

만약 리스트에서 모든 매칭 value/object를 삭제하고 싶다면, 반복문을 사용해 일일이 삭제해야 한다. 

 

myList = [1, 2, 3, 2]
 
myList.remove(2)
# myList : [1, 3, 2]

 

2. del

del()은 특정 인덱스에 위치하는 element를 삭제한다.

단, 반복문 내에서 사용하는 경우 변경되는 인덱스에 유의해야 한다.

 

myList = [3, 2, 2, 1]
 
del myList[1]
# myList : [3, 2, 1]


3. pop

pop()도 특정 인덱스에 위치하는 element를 삭제하지만, 동시에 삭제된 element를 반환한다.

단, pop() 역시 반복문 내에서 사용하는 경우 변경되는 인덱스에 유의해야 한다.

 

myList = [4, 3, 5]
 
myList.pop(1) # returns 3
# myList : [4, 5]

 

출처: www.csestack.org/difference-between-remove-del-pop-python-list/#:~:text=remove()%20delete%20the%20matching,way%20that%20returns%20the%20object.

 

 

이 문제에서는 del을 써서 풀었다.

 

소스 코드

class Solution(object):
    def removeDuplicates(self, nums):
        """
        https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/
        :type nums: List[int]
        :rtype: int
        """
        i = 0

        while i + 2 < len(nums):
            if nums[i] == nums[i + 2]:
                del nums[i + 2]
            else:
                i += 1

        return len(nums)