코테

리트코드 80. Remove Duplicates from Sorted Array II JAVA

SigLee0505 2023. 8. 24. 17:19

문제

문제 해석

이전의 포스팅 처럼 중복을 제거하는 것
But 2개 까지의 중복은 허용한다.

문제 해결 방식 1

수도코드

    문제의 핵심은
    1. 2개까지는 출력을 하되 3개부터 날려야된다. 나머지는 이전과 동일하다.

    수도코드
    for반복
    if(같지 않다.)
        count 0초기화
        저장하고 저장하는 index 늘려

    else
        2개보다 클 경우
        건너 뛰고, count++
        작을 경우
        입력하고 count++
        index++

수도 코드를 보면 크게 생각을 하지 않고 코드를 작성했다.
그냥 검증을 하나 더 때려서 코드를 작성한 것 뿐이다.

코드

 class Solution {
    public int removeDuplicates(int[] nums) {
        int count = 0;
        int index = 1;
        for(int i = 1; i < nums.length ; i++){
            if(nums[i] != nums[i-1]){
                count = 0;
                nums[index++] = nums[i];
            }else{
                count++;
                if(count <2){
                    nums[index++] = nums[i];
                }
            }
        }   
        return index;
    }
}

코드 회고

  1. 코드를 작성 할 때 생각을 조금 더 해보는 습관을 가져야겠다.

다른 사람 문제 풀이

방법 1

class Solution {
    public int removeDuplicates(int[] nums) {
        int index = 2;
        for(int i = 2 ; i <nums.length ; i++){
            if(nums[i] != nums[index-2]){
                nums[index++] = nums[i];
            }
        }

        return index;
    }
}

코드 분석

내 코드가 실패했던 것은

if(nums[i] != nums[index-2]){
    nums[index++] = nums[i];
}

이 부분에서 index -2 를 i -2 로 했기 때문에 중복이 터져나오지 않았다.
위의 코드 보면 index를 이용해서 비교하고 있다.
index는 이미 검증이 되어 있는 아이들만 존재하기 때문에 검사를 했을 때 문제가 생기지 않는다.