LeetCode/Array

[EASY] 27. Remove Element

Developer07 2022. 8. 19. 08:26

#문제 설명

Leetcode 27번 문제는 integer array와 target value가 주어져, array에서 target value를 제외한 k개의 element를 return 하면 된다. 또한 k-1 index 이후에는 결과에 아무 element나 있으면 된다. 예를 들어 input으로 다음과 같은 값이 주어졌다고 가정하자. 

Input: nums = [3,2,2,3], val = 3

 그럼 target value인 3을 제외하면 배열은 다음과 같이 변경 해야 한다.

Output: 2, nums = [2,2,_,_]

처음 3을 제외하면 배열은 [_,2,2,_] 이 되고 2개의 element, 즉 k = 2가 된다. 하지만 k-1 인 index 1 이후에는 값이 있으면 안되기에  [2,2,_,_] 처럼 재 배열 시키면 된다.

 

마지막으로 문제를 푸는 과정에서 새로운 메모리를 생성하면 안된다, 즉, 공간 복잡도 (Space Complexcity)가 O(1) 이 되도록 해야 한다. 

#문제 풀이

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

 

먼저 각기 다른 정수 i 와 j 를 생성한다. 다음, while loop을 사용해 현재 index에 있는 값이 target value와 같은지 확인하고, 같다면 j값을 하나 올린다. 만약 target value와 같지 않다면, array에 index i의 element값을 array의 index j의 값으로 변경해줍니다. i 와 j 모두 1씩 올려준다. 이렇게 함으로써 첫 번째 k-1의 element들을 target value가 아닌 값으로 바꾸고 k 부터 array.length - 1값 들은 target value들이 된다.