문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수의 배열 nums와 정수 val이 주어지고, nums에서 발생하는 모든 val을 제자리에서 제거해라. 요소의 순서는 바뀔 수도 있다. 그런 다음 val과 같지 않은 요소 수를 nums로 반환해라.
nums에 val과 같지 않은 요소의 수 k가 받아들일때, 다음과 같이 필요하다.
#1
Input: nums = [3, 2, 2, 3], val = 3
Output: 2, nums = [2, 2, , ]
Explanation: 너의 함수는 k = 2와 처음 2개의 요소가 2로 시작하는 배열을 반환해야한다.
반환된 k 외에 무엇을 남겨두는지는 중요하지 않다.
#2
Input: nums = [0, 1, 2, 2, 3, 0, 4, 2], val = 2
Output: 5, nums = [0, 1, 4, 0, 3, , , _]
Explanation: 너의 함수는 k = 5를 반환해야하고 nums의 처음 다섯개의 요소가 0, 0, 1, 3, 4를 포함한다.
이전에 풀었던 Remove Duplicates from Sorted Array와 비슷하게 변환된 배열을 확인한다.
nums를 순서대로 조회하면서 val과 일치하지 않으면 해당 인덱스에 값을 바꿔주는 방법으로 문제를 풀었다.
현재 인덱스를 알 수 있게 정수 idx를 선언하고 0을 할당한다.
int idx = 0;
for문을 사용해서 0부터 nums의 크기까지 반복한다. 이때 반복하면서 nums[i]가 주어진 val과 비교하여 같지 않다면 nums[idx]에 nums[i]를 할당하고, idx를 증가시킨다. 이렇게하면 배열을 변경하면서 남은 요소의 수를 계산할 수 있다.
for(int i = 0; i < nums.length; i++){
if(nums[i] != val){
nums[idx] = nums[i];
idx++;
}
}
마지막으로 idx를 반환한다.
return idx;
class Solution {
public int removeElement(int[] nums, int val) {
int idx = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] != val){
nums[idx] = nums[i];
idx++;
}
}
return idx;
}
}