Remove Duplicates from Sorted Array
특이하게 int(정수형) 를 반환하지만, 제공된 정수형 배열 nums[] 안의 원소를 체크하는 문제다.
즉, 단순히 int 값을 올바르게 구하는 것이 끝이 아닌 문제이다.
하지만, 이전 two-pointer 문제와 같은 유형이라는 걸 알 수 있다.
바로, 고유한 원소를 남기고 순회하면서 중복된 원소일지 아닐지를 판별한인덱스를 설정하면 된다는 점에서 눈치챌 수 있다.
그래서, 다음과 같이 각 인덱스를 설정했다.
uniqueIndexindex그리고, 결국 고유한 원소를 남기면 되므로 fail case 를 fast exception 처리를 하기 위해 같을 경우 skip 하도록 처리했다.
uniqueIndex가 가리키는 원소에 값을 대입하도록 했다.class Solution {
public int removeDuplicates(int[] nums) {
// 1. 비내림차순 정수 배열에서 고유한 원소를 식별한 인덱스
int uniqueIndex = 0;
// 2. 배열을 순회
// (1) nums[index] 와 nums[uniqueIndex] 가 같을 경우, 다음으로 패스
// (2) nums[index] 와 nums[uniqueIndex] 가 다를 경우,
// nums[uniqueIndex] = nums[index]
for (int index = 0; index < nums.length; index ++) {
if (nums[index] == nums[uniqueIndex]) continue;
nums[uniqueIndex] = nums[index];
uniqueIndex ++;
}
return uniqueIndex;
}
}
하지만, 위 풀이로 진행할 경우 다음과 같은 문제가 발생한다.
좌측에서부터 고유한 맨 첫 번째의 원소는 항상 다음으로 고유한 원소로 덧씌워진다.
즉, [1, 1, 2] 일 경우 우리는 [1, 2] 를 기대하지만 [2] 만 남게 된다.
결국, 위 방법으로 풀었을 때는 맨 첫 번째로 고유한 원소를 보호할 수 없게 된다는 문제가 있다.
그럼 첫 번째로 고유한 원소를 보호할 수 있게 하려면 어떻게 할 수 있을까?
해당 원소 다음부터 순회하면 되지 않을까?