Coding Test/LeetCode

27.Remove Element

JTB 2025. 10. 15. 14:34

난이도: Easy

링크:  LeetCode 27

풀이 날짜: 2025/10/14

 

1. 문제 이해

배열 nums와 값 val이 주어졌을 때, nums 내에서 val모두 제거한 후의 길이를 반환하는 문제다.

단, 추가적인 배열을 사용하지 말고 (in-place), 제거 후에도 나머지 원소들의 상대적 순서는 유지되어야 한다.

 

2. 아이디어: Two Pointers

배열을 한 번 순회할 포인터와 val가 아닌 값들만 앞으로 옮기기 위한 포인터 2개를 사용한다.

포인터 역할
num 순회용 포인터 (for문으로 배열을 순회)
current val이 아닌 값이 들어갈 위치를 가리킴

 

3. 코드 분석

var removeElement = function(nums, val) {
  let current = 0;

  for (let num of nums) {  
    if (num !== val) {      
      nums[current] = num;
      current++;
    }
  }

  return current;
};

순회하며, if (num !== val) 에서 val이 아닌 값을 발견하면 nums[current] 자리에 옮겨 담고, current를 1 증가시킨다. 즉, val을 “건너뛰며” 유효한 값만 앞으로 모은다. 그리고 current 는 곧 유효한 값들의 총 수가 된다.

항목 복잡도 설명
시간 복잡도 O(n) 배열 한 번 순회
공간 복잡도 O(1) 상수 크기의 포인터만 사용
접근 방식 Two Pointer (In-place 수정) 한 포인터로 유효 원소를 채우며 제거 수행

 

 

4. 요약 및 정리

포인트 설명
in-place 수정 새로운 배열을 만들지 않고 기존 배열을 직접 수정
Two Pointers 하나는 순회용, 하나는 유효한 값의 삽입 위치를 추적

이 문제는 “불필요한 값을 건너뛰며 배열을 재정렬”하는 전형적인 Two Pointers 패턴의 기본 문제다.