본문 바로가기

카테고리 없음

LeetCode-26 Remove Duplicates from Sorted Array

 

Remove Duplicates from Sorted Array - LeetCode

Can you solve this real interview question? Remove Duplicates from Sorted Array - Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place [https://en.wikipedia.org/wiki/In-place_algorithm] such that each unique element ap

leetcode.com

 

문제

오름차순으로 정렬되어있는 배열 nums를 중복제거한 오름차순으로 정렬하고, nums의 길이를 반환하는 문제입니다. in-place조건이 붙어있기때문에 새로 배열을 생성하여 중복된 값을 제거한 nums를 저장하고, 그 배열을 통째로 nums에 저장하는 방식은 불가능합니다.

풀이

temp라는 배열을 생성하여 중복 제거 후 오름차순으로 정렬합니다. enumerate를 사용하여 temp에 있는 값을 nums에 동일한 인덱스로 옮겨줍니다. 그러면 nums에 중복제거 된 후 오름차순으로 정렬된 nums의값들이 입력되게 됩니다. for문에서 변경되지 않은 nums의 뒷부분이 남아있기때문에 temp의 길이를 반환하면 됩니다.

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        temp = list(set(nums))
        temp.sort()
        for i,v in enumerate(temp):
            nums[i] = v
        return len(temp)

두번째 방법은 변수 n을 통해 요소의 개수를 파악하는 방법입니다. 새로운 요소를 만날 때마다 n값에 +1 합니다. 해당 요소가 처음 마주한 요소인지 판단하기 위해서 빈 배열 a에 처음 마주하는 요소들만 append 합니다. n이 현재까지 마주한 요소의 개수이기때문에 numns[n]의 위치에 처음 마주한 요소를 저장하면 중복을 없앤 nums가 됩니다. 애초에 주어진 배열이 오름차순으로 정렬되어있기 때문에 정렬을 하지 않아도 됩니다.

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        temp = list(set(nums))
        temp.sort()
        for i,v in enumerate(temp):
            nums[i] = v
        return len(temp)