[LeetCode] Remove Duplicates from Sorted Array

아르당·2024년 11월 25일

LeetCode

목록 보기
8/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

오름차순인 정수 배열 nums가 주어지고, 각 고유 요소가 오직 한번만 나타나도록 중복된 것을 그 자리에서 제거해라. 요소의 상대적 순서는 동일하게 유지되야 한다. 그리고 고유 요소의 숫자로된 nums를 반환해라.

  • nums의 첫 번째 k 요소가 nums에 있었던 순ㄴ서대로 고유한 요소를 포함하도록 배열 nums를 변경해라. nums에 남아있는 요소는 nums의 크기만큼 중요하지 않다.
  • k를 반환해라.

Example

#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가 있다.

Constraints

  • 1 <= nums.length <= 3 * 10^4
  • -100 <= nums[i] <= 100
  • nums는 오름차순으로 정렬되어 있다.

Solved

반복문을 사용하여 해당 인덱스의 값이 이전 인덱스의 값과 다른 때의 경우를 센다면 문제를 쉽게 해결할 수 있다.

정수 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의 배열도 확인을 해서 조금 까다롭다.

All Code

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;
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글