지문은 링크에서 확인해주세요.
본 문제는 해결하지 못했습니다.
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
const dupChkArr = Array.from({length: nums.length}).fill(0);
for(let i = 0; i < nums.length; i++) {
for(let j = i + 1; j < nums.length; j++) {
if(nums[i] === nums[j]) {
dupChkArr[j] = 1;
}
}
}
for(let i = 0; i < nums.length; i++) {
if(dupChkArr[i] > 0) {
nums.splice(i, 1);
}
}
return nums.length;
};
nums 배열의 요소에 변경을 가하다보니 바깥쪽 for문에서 탐색 기준이 되는 인덱스(i
)가 자주 바뀝니다. 필자는 nums 배열에 중복이 되는 요소를 별도의 JS배열(dupChkArr
)에 마킹두었습니다. 이로써 dupChkArr에서 마킹한 요소의 인덱스를 nums에 대입해서 제거하고자 하였습니다. 하지만, nums 배열의 요소에 변경을 가하면 dupChkArr에 마킹한 요소와 불일치가 발생하기 때문에 타당한 풀이가 아니었습니다.
이전에 필자가 수행한 해답이 있어서 참고하였습니다.
var removeDuplicates = function(nums) {
for(let i = 0; i < nums.length; i++){
if(nums[i] === nums[i + 1]){
nums.splice(i, 1);
i -= 1;
}
}
return nums.length;
};
JS배열의 요소에 변경을 가할 시, 재배열이 이루어지는 특성을 이용하여 탐색 기준이 되는 인덱스를 재조정하는 해답입니다.