알고리즘 문제/Medium

[Meduim] 배열에서 중복 요소 제거하기 2 - 80. Remove Duplicates from Sorted Array II

네야_IT 2024. 8. 8. 04:09
반응형

주어진 정수 배열 nums는 오름차순으로 정렬되어 있습니다. 각 고유 요소가 최대 두 번 나타나도록 배열에서 중복을 제자리에서 제거하세요. 요소들의 상대적인 순서는 유지되어야 합니다.

 

일부 언어에서는 배열의 길이를 변경할 수 없으므로, 대신 결과를 배열 nums의 첫 번째 부분에 배치해야 합니다. 더 구체적으로 말하자면, 중복을 제거한 후 k개의 요소가 남아 있다면, nums의 처음 k 요소가 최종 결과를 가져야 합니다. 첫 k 요소 이외의 부분에 무엇이 남아 있는지는 중요하지 않습니다.

 

최종 결과를 nums의 처음 k 슬롯에 배치한 후 k를 반환하세요.

 

다른 배열에 대한 추가 공간을 할당하지 마세요. 입력 배열을 제자리에서 수정하여 O(1) 추가 메모리로 이 작업을 수행해야 합니다.

 

예시 1:

  • 입력: nums = [1,1,1,2,2,3]
  • 출력: 5, nums = [1,1,2,2,3,_]
  • 설명: 함수는 k = 5를 반환해야 하며, nums의 처음 다섯 요소는 각각 1, 1, 2, 2, 3입니다. 반환된 k 이후에는 무엇이 남아 있든 상관없습니다 (따라서 밑줄로 표시됨).

예시 2:

  • 입력: nums = [0,0,1,1,1,1,2,3,3]
  • 출력: 7, nums = [0,0,1,1,2,3,3,_,_]
  • 설명: 함수는 k = 7을 반환해야 하며, nums의 처음 일곱 요소는 각각 0, 0, 1, 1, 2, 3, 3입니다. 반환된 k 이후에는 무엇이 남아 있든 상관없습니다 (따라서 밑줄로 표시됨).

제약 조건:

  • 1 <= nums.length <= 3 * 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums는 비감소 순으로 정렬되어 있습니다.

 

풀이

class Solution:

    def removeDuplicates(self, nums: List[int]) -> int:
        k = 1  # 초기 값으로 1을 사용하여 첫 번째 숫자는 항상 포함되도록 설정
        count = 1  # 각 숫자의 개수를 세기 위해 사용

        for i in range(1, len(nums)):
            if nums[i] == nums[i - 1]:
                count += 1  # 동일한 숫자가 발견되면 개수 증가
            else:
                count = 1  # 새로운 숫자가 발견되면 개수를 1로 리셋

            if count <= 2:  # 각 숫자를 최대 두 번까지 허용
                nums[k] = nums[i]
                k += 1

        return k
반응형