LeetCode 2. Remove Element

허크·2023년 8월 24일
0

https://leetcode.com/problems/remove-element/?envType=study-plan-v2&envId=top-interview-150

27. Remove Element

⭐ 문제

숫자 배열 nums, 숫자 val이 주어졌을때 val을 '제자리에서' 제거합니다. 순서는 변경 될 수 습니다. 그리고 val과 같지않은 요소의 수를 반환해야 합니다.

같지 않은 요소의 수를 k 라고 가정했을 때
1. nums의 처음 k개의 요소는 val과 다른 값을 포함하도록 해야합니다. 나머지 요소들은 nums의 사이즈와 마찬가지로 중요하지 않습니다.
2. k를 반환해야 합니다

✍️ 의사 코드

  1. 변수 및 리스트 초기화
  2. 배열 순회하여 인덱스 수집 및 k값 계산
  3. 마지막 인덱스 초기화 및 배열 값 교환
  4. k값 반환

✅ 나의 풀이

class Solution {
    public int removeElement(int[] nums, int val) {
        int k = 0;
        List<Integer> tempArray = new ArrayList<>();

        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == val) {
                tempArray.add(i);
            } else {
                k++;
            }
        }

        int lastIndex = nums.length - 1;
        for (int i = tempArray.size() - 1; i >= 0; i--) {
            if (indexArr.get(i) == lastIndex) {
                lastIndex--;
            } else {
                int temp = nums[tempArray.get(i)];
                nums[tempArray.get(i)] = nums[lastIndex];
                nums[lastIndex] = temp;
                lastIndex--;
            }
        }

        return k;
    }
}

🖥️ 결과

Runtime 0ms

다른 해답

class Solution {
    public int removeElement(int[] nums, int val) {
        int k = 0;
        
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val) { 
                nums[k] = nums[i]; 
                k++;
            }
        }
        
        return k;
    }
}

나머지 요소들은 nums의 사이즈와 마찬가지로 중요하지 않습니다.

라는 부분이 힌트였습니다. 문제의 표면적인 요구는 제자리서 삭제지만 요구사항을 잘 살펴보면 그저 k개의 갯수만큼만 val이 아닌 요소들을 앞부터 덮어씌워주기만 하면 되는 문제였습니다.

profile
codestates seb 44th // 다크모드로 보는걸 추천드립니다

0개의 댓글