오늘도 개발

11. Remove Element 본문

자료구조 & 알고리즘/Leetcode

11. Remove Element

Sueeeeeee 2022. 5. 31. 12:36

문제

https://leetcode.com/explore/learn/card/fun-with-arrays/511/in-place-operations/3575/

nums 배열에서 val인 요소를 모두 삭제하고

삭제 후 남아있는 요소의 개수 k를 반환하라.

in-place로 실행하되 요소의 순서는 바뀌어도 됨.

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]

 

내가 해결한 방식

val_index는 val을 가리키는 포인터, 

i는 val이 아닌 요소를 찾으며 한 칸씩 이동하는 포인터.

 

val_index, i 둘 다 0에서 시작한다.

 

- 현재 요소가 val인 경우 :

   i만 한 칸 앞으로 보낸다.

   val_index는 가만히 있는다.

 

- 현재 요소가 val이 아닌 경우 :

   i요소와 val_index 요소를 교환한다.

   i와 val_index를 둘 다 한 칸씩 이동한다.

 

=> val이 있는 경우 val_index는 항상 val을 가리키고, i는 항상 val이 아닌 요소를 가리킴

=> val이 없는 경우 val_index, i는 항상 같은 요소를 가리킴. 

=> iteration 완료 후 val만 배열 뒤로 정리됨. (ex. [5, 2, 4, 9, 2, 10] => [5, 4, 9, 10, 2, 2] val_index는 4가 됨)

def removeElement(self, nums: List[int], val: int) -> int:
    val_index = 0

    for i in range(len(nums)):
        if nums[i] != val:
            nums[i], nums[val_index] = nums[val_index], nums[i]
            val_index += 1

    return val_index

'자료구조 & 알고리즘 > Leetcode' 카테고리의 다른 글

13. Third Maximum Number  (0) 2022.06.04
12. Height Checker  (0) 2022.06.03
10. Sort Array By Parity  (0) 2022.05.26
9. Move Zeros  (0) 2022.05.25
8. Replace Elements with Greatest Element on Right Side  (0) 2022.05.22