Coding Test/LeetCode
26.Remove Duplicates from Sorted Array
JTB
2025. 10. 15. 14:45
난이도: Easy
링크: LeetCode 26
풀이 날짜: 2025/10/15
1. 문제 이해

정렬된 배열 nums가 주어질 때, 중복된 요소를 제거하고 고유한 요소만 남긴 후, 그 길이를 반환해야 한다.
단, 새로운 배열을 만들면 안 되고, 주어진 배열 nums를 직접 수정(in-place)해야 한다.
즉, 문제의 핵심은 배열을 정리(clean up)하면서 중복을 제거하는 효율적인 방법을 찾는 것이다.
2. 아이디어: Two Pointers
두 개의 포인터를 사용해 배열을 한 번 순회하며, 중복되지 않은 값만 앞으로 모으는 방식이다.
| 포인터 | 역할 |
| i | 배열을 순회하면서 현재 원소 확인 |
| current | 유일한 요소를 저장할 다음 위치 |
배열이 정렬되어 있으므로, 인접한 두 원소가 다르면 새로운 고유 값이 등장한 것이다.
3. 풀이 코드
var removeDuplicates = function(nums) {
let current = 1; // 첫 번째 요소는 항상 고유하므로, 두 번째 요소부터 비교를 시작한다.
for (let i = 1; i < nums.length; i++) {
// 현재 값이 바로 앞의 고유 값(nums[current - 1])과 다르면, 새로운 값으로 간주한다.
const isUnique = nums[i] !== nums[current - 1];
if (isUnique) {
// 새로운 고유 값이 등장하면 current 위치에 덮어쓰고, current를 한 칸 이동시킨다.
nums[current] = nums[i];
current++;
}
}
return current;
};
시간 복잡도는 한 번의 순회만 진행하므로 O(n)
공간 복잡도는 상수 공간을 사용하므로 O(1)
4. 요약 및 정리
| 포인트 | 설명 |
| in-place 수정 | 추가 배열 없이 기존 배열을 직접 수정 |
| Two Pointers | 하나는 순회, 하나는 유일한 값의 위치 추적 |
풀이 코드 중 이 한줄이 포인트라고 할 수 있다.
if (nums[i] !== nums[current - 1]) nums[current++] = nums[i];
배열을 깔끔하게 정리하며, current가 중복 제거 후의 배열 길이를 반환한다.