#80 Remove Duplicates from Sorted Array II

전우재·2023년 8월 24일
0

leetcode

목록 보기
4/21

문제링크 - https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/?envType=study-plan-v2&envId=top-interview-150

문제 분석

  • 1 <= nums.length <= 3 * 104
  • -104 <= nums[i] <= 104
  • nums는 오름차순으로 정렬한다.
  • 추가 배열을 할당하면 안된다!
  • nums 내부의 값들이 최대 두번만 반복되도록 했을 때 갯수를 반환하고 그 값들을 앞에서부터 오름차순 정렬해야한다.

문제 해결

문제 해결 로직

  1. int array nums을 입력받는다.
  2. 반복문으로 탐색한다.
  3. 뒤에 동일한 값이 없으면 k위치에 이동시킨다. k를 증가시킨다. 겹친 값의 개수를 초기화한다.
    3-1. 뒤에 동일한 값이 있으면 겹친 값의 개수(duplicateNum)을 증가시킨다.
    3-1-1. duplicateNum이 1이면 k위치에 이동시킨다. k를 증가시킨다.
  4. k를 반환한다.

코드 작성

class Solution {
  public int removeDuplicates(int[] nums) {
    int k = 0; // nums의 개수
    int duplicateNum = 0; // 겹친 값의 개수
    
    for(int i = 0; i< nums.length;i++){
      if(i==0 || nums[i-1]!=nums[i]){
      // 뒤에 동일한 값이 아닌 경우
        nums[k] = nums[i];
        k++;
        duplicateNum = 0;
      }else if(duplicateNum == 0){
      // 뒤에 동일한 값이 하나만 있는 경우
        nums[k] = nums[i];
        k++;
        duplicateNum++;
      }else{
      // 뒤에 동일한 값이 계속 반복되는 경우
        duplicateNum++;
      }
    }

    return k;
  }
}

회고

  • duplicateNum을 사용하면서 중복을 확인하는 부분이 복잡하다.
  • else if가 생기면서 가독성이 떨어진다.
  • 결국 공간복잡도와 시간복잡도상 상당히 낮은 점수를 기록했다.

0개의 댓글

관련 채용 정보