LeetCode 27: 같은 배열 안에서 특정 값 제거하기
배열을 줄이는 대신 앞쪽에 모읍니다

정수 배열 nums에서 val과 같은 값을 제거하고 남은 값의 개수를 반환하는 문제입니다. 값의 순서는 바뀌어도 되지만 같은 배열 안에서 처리해야 합니다.
문제를 읽다가 in-place가 무엇인지 찾아봤습니다. 이 문제에서는 결과를 담을 배열을 따로 만들지 말고 nums를 직접 바꾸라는 뜻으로 이해했습니다.
배열의 길이는 그대로 두고 남길 값을 앞쪽에 차례로 덮어씁니다. index를 0에서 시작해 모든 원소를 확인하다가 val과 다른 값을 만나면 nums[index]에 넣고 index를 늘립니다.
반복이 끝나면 앞의 index개가 유효한 값입니다. 그 뒤에 무엇이 남아 있는지는 반환하는 길이에 포함되지 않습니다.
코드
class Solution {
public int removeElement(int[] nums, int val) {
// 인덱스 0 부터 비교를 시작한다.
int index = 0;
// nums 배열 전체를 반복한다.
for(int i = 0; i < nums.length; i++){
// 만약 nums[i] 가 val 값과 다르다면
if(nums[i] != val){
// 해당 위치를 nums[i]로 변경하고
nums[index] = nums[i];
// 변경할 위치를 다음 인덱스로 옮긴다.
index++;
}
}
// 가장 마지막으로 옮겨진 위치까지가 정리되어있는 배열의 길이이다.
return index;
}
}