LeetCode/NeetCode

27. Remove Element

hyunkookim 2025. 3. 30. 01:35

27. Remove Element

 

https://leetcode.com/problems/remove-element/description/

 

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        l, r = 0, len(nums)-1

        while(l<r):
            if nums[r] == val:
                r-=1
            if nums[l] == val:
                nums[l], nums[r] = nums[r], nums[l]
                r -=1
            l +=1
        print(nums)
        return l+1

 

좋아요! 전체적으로는 나쁘지 않은 접근이에요 — 양쪽 포인터(l, r)를 사용해서 val 값을 뒤로 보내는 방식인데, 이 코드에는 두 가지 문제점이 있어요:


❌ 문제 1: l < r 조건 때문에 일부 요소를 검사하지 못함

  • l == r일 때 마지막 값을 체크하지 못하고 루프가 끝나요.
  • 예: [2,2,3], val = 3이면 마지막 3을 못 체크함.

❌ 문제 2: return l + 1은 정확한 개수를 보장하지 못함

  • l을 무조건 증가시키기 때문에, val을 여러 번 만나면 실제 남은 요소 개수랑 l이 다를 수 있어요.
  • 예: [3,2,2,3], val = 3일 때, 남는 건 [2,2]인데, l은 3이 되므로 return 4를 하게 됨 → ❌

최종 코드

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0  # val이 아닌 값들을 앞으로 덮어쓸 위치
        
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]
                k += 1
        
        return k

 

Time & Space Complexity

  • Time complexity: O(n)
  • Space complexity: O(1)

 

https://youtu.be/Pcd1ii9P9ZI

 

 

'LeetCode > NeetCode' 카테고리의 다른 글

707. Design Linked List  (0) 2025.03.30
1929. Concatenation of Array  (0) 2025.03.30
[Two Pointers] 26. Remove Duplicates from Sorted Array  (0) 2025.03.30
Sorting: 75. Sort Colors  (0) 2025.02.04
Sorting: Quick Sort ★★★  (0) 2025.02.04