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들이 된다.