Blog

LeetCode 80: 정렬된 배열의 중복을 두 개까지 남기기

중복 횟수를 먼저 셉니다

Remove Duplicates from Sorted Array II 문제

정렬된 배열에서 같은 값을 최대 두 개까지 남기는 문제입니다. 한 개만 남겼던 풀이와 마찬가지로 순서를 유지하면서 원래 배열을 수정합니다.

첫 번째 값은 그대로 두고 인덱스 1부터 확인했습니다. 바로 앞의 값과 같으면 sameCount를 늘리고 다르면 0으로 되돌린 뒤, sameCount < 2인 값만 pos 위치에 저장합니다.

여기서 sameCount는 해당 값의 전체 등장 횟수가 아니라 첫 등장 이후의 반복 횟수입니다. 첫 값은 0, 두 번째는 1, 세 번째는 2가 되므로 두 번째까지만 남습니다. pos는 다음에 저장할 위치이면서 지금까지 남긴 값의 개수입니다.

코드

Java
class Solution {
    public int removeDuplicates(int[] nums) {
        // 시작위치는 1
        int pos = 1;
        // 중복 횟수를 체크할 변수
        int sameCount = 0;
        for(int i = 1; i < nums.length; i++){
            // 만약 중복 된 수라면 sameCount 1 증가
            if(nums[i - 1] == nums[i]) sameCount++;
            // 중복되지 않은 수라면 sameCount 초기화
            else sameCount = 0;
            
            // 앞서 계산한 sameCount에 따라 배열 요소 변경
            if(sameCount < 2) nums[pos++] = nums[i];
        }
        
        // 마지막에 수정된 위치 까지가 유효한 배열 요소
        return pos;
    }
}