본문 바로가기
프로그래밍 언어(Programming Languages)/LeetCode

[코딩 인터뷰] LeetCode - Array / String - 27. Remove Element

by 데이터 벌집 2023. 12. 26.

 

안녕하세요, 코딩에 열정을 가진 여러분! 🌟 오늘은 LeetCode에서 자주 등장하는 문제인 '27. Remove Element'를 다뤄볼 거예요. 이 문제는 배열과 투 포인터에 대한 기본적인 이해를 바탕으로, 효율적인 문제 해결 능력을 요구합니다. 🧠 여러분도 함께 문제를 풀어보며, 실력을 한 단계 업그레이드해볼까요? 💪

 

 

LeetCode - Remove Element


🎯 문제 설명

 

"Remove Element" 문제는 정수 배열 nums와 정수 val이 주어졌을 때, nums에서 val과 일치하는 모든 요소를 제거하는 것입니다. 중요한 점은, 이 작업을 "제자리"에서 수행해야 한다는 거예요! 😲 배열의 순서는 변경될 수 있지만, val과 일치하지 않는 요소들의 개수 k를 반환해야 해요.

👉 예시:
입력: nums = [3,2,2,3], val = 3
출력: 2, nums = [2,2,,]

 

문제보기 

 

Remove Element - LeetCode

Can you solve this real interview question? Remove Element - Given an integer array nums and an integer val, remove all occurrences of val in nums in-place [https://en.wikipedia.org/wiki/In-place_algorithm]. The order of the elements may be changed. Then r

leetcode.com


 

알아야 할 개념 공부하기 📘

  • 투 포인터 기법: 배열을 효율적으로 순회하는 방법 중 하나입니다. 😎
  • 제자리 알고리즘: 추가 공간을 사용하지 않고, 입력으로 받은 배열 내에서 문제를 해결하는 방식이에요.

문제 풀어보기 🔍

  1. write_index를 0으로 초기화하여, val과 일치하지 않는 요소를 저장할 인덱스를 정합니다.
  2. for 루프를 사용하여 nums 배열을 순회합니다.
  3. 만약 현재 요소 nums[i]가 val과 다르다면, 이 요소를 nums[write_index] 위치에 복사하고 write_index를 1 증가시킵니다.
  4. 모든 요소를 순회한 후, write_index는 val과 일치하지 않는 요소들의 총 개수를 나타내므로 이 값을 반환합니다.
class Solution:
    def removeElement(self, nums, val):
        write_index = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[write_index] = nums[i]
                write_index += 1

        return write_index

# 예시로 코드를 실행해보겠습니다.
nums_example = [3, 2, 2, 3]
val_example = 3
solution = Solution()
k = solution.removeElement(nums_example, val_example)

k, nums_example  # 결과와 변경된 배열을 출력합니다.

 

 

이 솔루션은 제자리에서 작동하며, 추가 메모리를 필요로 하지 않습니다. 또한, 시간 복잡도는 O(n)으로 효율적이며, 공간 복잡도는 O(1)입니다. nums 배열의 요소들이 val과 일치하지 않는 경우에만 위치를 변경하기 때문에, 배열의 나머지 부분은 변경되지 않습니다.


'27. Remove Element' 문제를 통해 우리는 어떻게 제자리에서 배열을 조작하고 효과적으로 해결 방법을 찾을 수 있는지 배웠습니다. 이 문제는 투 포인터 기법을 사용해 배열을 최적으로 다루는 방법을 연습하는 데 아주 좋은 예제입니다. 🖥️ 이번 경험을 통해 여러분의 코딩 실력이 더욱 단단해졌기를 바라며, 다음 문제에서 또 만나요! 🚀