Remove Duplicates from Sorted Array II

zoovely·2023년 6월 20일
0
post-thumbnail

💬 문제

[문제 링크]
오름차순 정렬된 int 배열 nums
중복된 요소를 최대 2개까지만 남기고 삭제
최종적으로 남게되는 요소의 개수 k 반환
in-place하게 배열을 바꿀 것
이전 문제와 동일한 방식이며 중복 허용이 2개까지 가능해짐

✍️ 나의 풀이

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    let len = nums.length;
    let k = 1;

    for (let i = 2; i < len; i++) {
        if (nums[k - 1] !== nums[i]) {
            k++;
            nums[k] = nums[i];
        }
    }

    return (k + 1);
};

이전 문제에서 다른 사람의 풀이를 보고 알게된 방식을 사용해보았다.
k는 현재 저장되고 있는 인덱스 겸 길이 반환용 변수다.
한 번의 중복이 가능하므로 배열을 돌면서 k - 1과 같지 않으면 k번째에 값을 대입하는 방법이다.
첫 값과 두번째 값은 무조건 저장될 것이기 때문에 i=2부터 탐색하였다.
k번째 인덱스까지 값이 저장되었으므로 길이는 k + 1을 반환해준다.

📌 결과

Accepted
Runtime 66ms (Beats 74.30%)
Memory 43.5MB (Beats 96.99%)

📚 러닝 포인트

꽤 좋은 결과와 한 번의 시도에 통과했기 때문에 따로 깨닫게 된 점은 없다. 다만 이전의 방식이 이번 문제와 잘 맞았다는 것과, 그것을 활용할 수 있었다는 점이 뿌듯하고 문제를 계속 풀면서 발전해나가고 있는 것 같아 안심이 된다. 그래도 다른 사람의 풀이를 보긴 했는데, 핵심 알고리즘과 관련된 내용은 아니지만 배워간게 있어 적어보려 한다.

const removeDuplicates = function (nums) {
  if (!nums.length) return 0;

  let k = 0;

  for (let i = 0; i < nums.length; i++) {
    if (k < 2 || nums[i] > nums[k - 2]) {
      nums[k] = nums[i];
      k++;
    }
  }

  return k;
};

바로 이 코드인데, 주어지는 함수 템플릿의 선언을 const로 바꾼 점과 길이가 0인 배열이 입력값으로 들어올 수 있어 예외처리를 한 부분이 매우 인상 깊었다. 이렇게 조그만 부분이더라도 잘 챙겨서 처리해둔다면 다양한 입력값을 사용하는 테스트에서도 유연히 통과할 수 있을 것이라 생각한다.

profile
나도 할 수 있을까?

0개의 댓글