본문 바로가기
알고리즘

[Algorithm & English Study] LeetCode.26 Remove Duplicates from Sorted Array

by 내가 진짜 유일한 2024. 11. 24.

English Content

Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that unique element appears only once.

The relative order of the elements should be kept the same.

Then return the number of unique elements in nums.

Consider the number of unique elements of nums to k, to get accepted, you need to do the following things:

Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially. The remaining elements of nums are not important as well as the size of nums.

Return k.

내가 번역한 내용

비 내림차순으로 정렬된 정수형 배열 nums, 중복된 자리에 있는 각 유니크한 요소가 오직 한번 나타난다.

요소들의 그 관계 순서는 같게 유지해야한다. 그러고 nums안에 유니크한 수를 제거해라

nums의 유니크한 요소들의 수가 k가 되도록 고려해라, 통과하기 위해 다음과 같은 것을 지켜야한다.

Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially.

nums 배열을 다음처럼 변경해라. nums 배열의 첫 k 요소들이 그 유일한 요소들이 순서에 맞게 포함된다 그들이 표현된다 num안에 initially(초기 ?)

nums 배열의 남아 있는 요소들은 nums의 크기 만큼 중요하지 않다.

K를 반환해라.

모르는 영어 단어 맥락으로 뜻 추측 영어 단어 해석 문장

appears 나타나다, 표현하다 ~ 인 것 같다, 나타나다, 발생하다 remove the duplicates in-place such that unique element appears only once
the relative order 관계 순서 상대적 순서 The relative order of the elements should be kept the same
be present 표현된다, 나타내지다 관심을 온전히 쏟다 they were present in nums initially
initially 초기상태 처음에 they were present in nums initially

단어를 알고 난 후, 번역한 내용

비 내림차순으로 정렬된 정수형 배열을 주어진다, 중복된 자리에 있는 것들을 제거하고 유일한 요소만 한번 나타나게 해라

유일한 요소들의 상대적 순서는 그대로 유지되어야 한다

그러고 배열안에 유일한 요소의 수를 반환해라

nums 배열의 유니크한 요소의 수가 k가 되도록 고려해라**,** 통과하기 위해 너는 다음과 같은 것들을 따라야한다.

배열 nums를 다음처럼 변경해라, nums의 첫 k 요소를 포함한다 유일한 요소들이 순서로 되어야 한다

그 순서들은 처음\ nums안에 나타난다

남아있는 nums의 요소들은 nums의 크기 만큼 중요하지 않다.

번역기로 번역한 내용

감소하지 않는 순서로 정렬된 정수 배열 nums가 주어지면, 고유한 요소가 한 번만 나타나도록 중복을 제자리에서 제거합니다.

요소의 상대적 순서는 동일하게 유지해야 합니다.

그런 다음 nums의 고유한 요소 수를 반환합니다.

nums의 고유한 요소 수를 k로 고려하면 수락되려면 다음 작업을 수행해야 합니다.

nums의 처음 k개 요소에 nums에 처음 존재했던 순서대로 고유한 요소가 포함되도록 nums 배열을 변경합니다. nums의 나머지 요소와 nums의 크기는 중요하지 않습니다.

k를 반환합니다.

처음에 해결이 안되었던 코드

class Solution(object):
    def removeDuplicates(self, nums):
        for i in (nums):
            if nums.count(i) > 1:
                nums.remove(i)

이유

중복을 제거하기 위해, nums 배열에 있는 요소를 삭제하면서, 뒤에 있는 요소가 앞 당겨져 삭제가 안되는 경우가 발생했음.

nums = [1, 1, 1, 1] 이라고 했을 때, 위의 코드를 실행하면 예상 결과는 [1] 이었지만, [1, 1]이 되는 케이스가 발생

그 이유는 첫 번째 반복일 때, 첫 1을 제거하면[1, 1, 1, 1] → [1, 1, 1]가 되고

두 번째 반복일 때, 파란색 1을 제거하면 [1, 1]가 된다.

하지만, 세번 째 요소를 찾으려고 할 때 이미 요소가 2개이기 때문에 반복문이 끝나게 된다.

그래서 반복문을 실행할 때, 참조하고 있는 리스트를 변경하면 문제가 생길 수 있다.

따라서 리스트를 복제해서 요소를 변경하거나, 역순으로 참조하게 되면 이와 같은 문제를 해결할 수 있다.

수정한 코드

class Solution(object):
    def removeDuplicates(self, nums):
        for i in reversed(nums):
            if nums.count(i) > 1:
                nums.remove(i)