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)
'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 |