문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
오름차순인 정수 배열 nums가 주어지고, 각 고유 요소가 오직 한번만 나타나도록 중복된 것을 그 자리에서 제거해라. 요소의 상대적 순서는 동일하게 유지되야 한다. 그리고 고유 요소의 숫자로된 nums를 반환해라.
#1
Input: nums = [1, 1, 2]
Output: 2, nums = [1, 2, _]
Explanation: 너의 함수는 k = 2를 반환해야한다. nums의 처음 두 요소는 각각 1과 2가 있다.
#2
Input: nums = [0, 0, 1, 1, 1, 2, 2, 3, 3, 4]
Output: 5, nums = [0, 1, 2, 3, 4, , , , , _]
Explanation: 너의 함수는 k = 5를 반환해야한다. nums의 처음 다섯 요소는 각각 0, 1, 2, 3, 4가 있다.
반복문을 사용하여 해당 인덱스의 값이 이전 인덱스의 값과 다른 때의 경우를 센다면 문제를 쉽게 해결할 수 있다.
정수 idx를 선언하고 1을 할당한다. for문을 사용할 것이고, 중복된 숫자가 나타날 경우 값을 바꿔줘야 하기때문에 1을 할당했다.
int idx = 1;
for문을 사용하여 i는 1부터 nums의 크기만큼 반복한다. 반복을 수행할때마다 이전 값(nums[i - 1])과 현재 값(nums[i])와 비교하여 같이 않다면 nums[idx]에 nums[i]를 할당하고, idx를 증가시킨다.
for(int i = 1; i < nums.length; i++){
if(nums[i - 1] != nums[i]){
nums[idx] = nums[i];
idx++;
}
}
idx를 반환한다.
return idx;
단순히 중복제거 후, 숫자의 갯수를 구하는 문제라면 더 쉬울 수 있다. 하지만 테스트 케이스에서는 nums의 배열도 확인을 해서 조금 까다롭다.
class Solution {
public int removeDuplicates(int[] nums) {
int idx = 1;
for(int i = 1; i < nums.length; i++){
if(nums[i - 1] != nums[i]){
nums[idx] = nums[i];
idx++;
}
}
return idx;
}
}