난이도: 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 패턴의 기본 문제다.
'Coding Test > LeetCode' 카테고리의 다른 글
| 169.Majority Element (0) | 2025.10.15 |
|---|---|
| 26.Remove Duplicates from Sorted Array (0) | 2025.10.15 |
| 88.Merge Sorted Array (0) | 2025.10.15 |
| 322.Coin Change (0) | 2025.10.13 |
| 198. House Robber (0) | 2025.10.13 |