본문으로 바로가기

배열의 위치를 변경하지 않고 기존의 배열의 원소들 중에 특정 원소를 삭제한다.

(in-place algorithmn으로 구현)

반환하는 값은 아무 값이어도 상관 없다.

LeetCode에서 푼 문제 리스트 보기

LeetCode에서 문제 보기

github에서 코드 보기

문제 풀이

지난 문제(LeetCode 26. Remove Duplicates from Sorted Array (Easy))와 유사하다. 이번에는 값을 삭제하게 되면서 배열의 길이의 변동이 있다는 점이 다르다. 이 문제가 어렵지는 않지만, 내가 자주 사용하는 numerate() 메소드가 새로운 객체로 반환하는지 결과값은 같으나 Wrong Answer이라고 떴다. 생각해보니 Python의 enumerate()는 index의 값을 추가해서 객체를 리턴해주기 때문에 기존 배열과 같을순 없었다. while문을 사용하여 배열 내에 val가 있을 때까지만 배열 내에 val를 찾아서 삭제해준다. for문으로 순회하면서 배열의 원소를 삭제할 경우에는 전체 길이가 변동되기 때문에 이상한 결과 값이 나올 수도 있다. 이 부분만 주의한다면 충분히 빠르게 문제를 해결 할 수 있을 것이다.

파이썬 코드

1
2
3
4
5
6
7
8
9
10
11
class Solution:
    def removeElement(self, nums, val) -> int:
        """
        Runtime: faster than 99.16% of Python3
        Memory Usage : faster than 5.09% of Python3
        """
        idx = 0
        while nums.count(val):
            nums.remove(val)
        print(nums)
        return len(nums)
cs