본문 바로가기

DEVELOP/Algorithm

[Python] LeetCode 문제풀이 :: 27. Remove Element

반응형

LeetCode

LeetCode 27번 문제풀이

 

https://leetcode.com/problems/remove-element/

 

Remove Element - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

Given an array nums and a value val, remove all instances of that value in-place and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

The order of elements can be changed. It doesn't matter what you leave beyond the new length.

 

Example 1:

Given nums = [3,2,2,3], val = 3,

Your function should return length = 2, with the first two elements of nums being 2.

It doesn't matter what you leave beyond the returned length.

 

Example 2:

Given nums = [0,1,2,2,3,0,4,2], val = 2,

Your function should return length = 5, with the first five elements of nums containing 0130, and 4.

Note that the order of those five elements can be arbitrary.

It doesn't matter what values are set beyond the returned length.

리스트 nums가 주어지면 val을 제거하는 문제. vals을 제거한 리스트의 길이를 리턴값으로 내보내라고 하지만, 훼이크다. 따로 처음 주어진 nums의 맨 앞 원소 두 개를 검사하기 때문에 무조건 nums를 조작해야 한다. 새로운 리스트를 만든다거나 하는 건 무쓸모. 그냥 주어진 nums 자체에서 원소를 제거하도록 조작하는 문제다.

 

# Solution 1

class Solution:
    def removeElement(self, nums, val):
        for i in range(len(nums)):
            if nums[0] != val:
                nums.append(nums[0])
                del nums[0]
            else:
                del nums[0]
        return len(nums)

반복문으로 요소 하나하나를 체크하면서 제거하면 리스트의 길이가 바뀌어서 out of index 에러가 난다. 그러면서도 리스트 길이만큼 요소는 체크해야 한다. 생각 끝에 큐를 사용하기로 했다. 리스트의 각 인덱스를 검사하는 게 아니다. 맨 앞 요소를 리스트 길이만큼 검사한다. 그래서 nums[0]이 val과 다르면, 리스트에 남아있어야 하므로 리스트의 맨 뒤에 추가한다. 그리고 nums[0]을 제거한다. nums[0]이 val과 같으면 그냥 제거한다. 실행 시간 83점, 메모리 100점으로 괜찮은 점수.

 

한 줄 요약: 리스트 길이만큼 맨 앞의 요소를 검사해서 val이면 제거하고, 아니면 뒤로 보낸다. 

 

https://github.com/infomuscle/algorithms-leetcode/blob/master/python/27.%20Remove%20Element.py

 

infomuscle/algorithms-leetcode

Solutions for LeetCode Problems. Contribute to infomuscle/algorithms-leetcode development by creating an account on GitHub.

github.com

 

반응형