[LeetCode | Javascript] Remove Element

박기영·2023년 8월 23일

LeetCode

목록 보기
5/41

solution

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    for(let i = 0; i < nums.length; i++){
        if(nums[i] === val){
            nums.splice(i--, 1);
        }
    }

    return nums.length;
};

in-place 알고리즘을 사용해서 해결하기를 원했기 때문에
최대한 변수, 상수를 생성하지 않는 방법으로 해결하고자 했다.

splice()는 원본을 변경하기 때문에, 추가적인 공간이 필요하지 않으며,
데이터가 삭제되었을 경우, 해당 인덱스로 다음 데이터들이 밀려오기 때문에
i--를 통해 해당 인덱스에서의 연산을 다시 진행하도록 한다.

원래는 filter() 메서드를 사용해서 val과 동일한 값들을 지우려고 했는데,
출력 부분에서 계속 이상한 값이 나오는 바람에 이 방법은 사용하지 않았다.
아무래도 릿코드 내부적으로 처리되는 것이 있나보다..

다른 분의 solution

var removeElement = function(nums, val) {
    var zeroStartIdx = 0;
    for(let i=0;i<nums.length;i++){
        if(nums[i]!==val){
            nums[zeroStartIdx]=nums[i];
            zeroStartIdx++
        }
    }
    return zeroStartIdx; 
};

필자와 조건문은 다르지만, 결과적으로는 같은 기능을 하는 코드이다.
메서드를 사용하지 않았기 때문에 가져와봤다.
이 분은 값이 같지 않은 경우 현재 값을 다시 현재 인덱스에 할당하고, 타겟 인덱스를 증가시켰다.
이러면 val과 같은 값을 가지는 원소들은 타겟 인덱스를 증가시키지 않으므로
결국에는 같지 않은 값의 개수만 카운트할 수 있다.

profile
나를 믿는 사람들을, 실망시키지 않도록

0개의 댓글