코린이의 소소한 공부노트

[LeetCode/Easy] 27. Remove Element 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 27. Remove Element

무지맘 2022. 12. 2. 12:00

1. Input

1) int 배열 nums

2) 정수 val

 

2. Output

1) nums에서 val을 제거한 후 남은 숫자의 개수

2) output을 반환받은 custom judge가 맞게 풀었는지 확인하는 방법

int[] nums = {...}; // 첫번째 input
int val = ...; // 두번째 input
int[] expectedNums = {...}; // 정답 배열. 오름차순으로 정렬되어 있는 상태
 
int k = removeElement(nums, val); // 내가 작성한 코드를 불러와서 반환값을 k에 저장
 
assert k == expectedNums.length; // 반환값이 정답 배열의 길이와 같아야 한다.
sort(nums, 0, k); // nums의 맨 앞부터 k개의 요소를 정렬한다.
for (int i = 0; i < actualLength; i++) {
    assert nums[i] == expectedNums[i]; // 내가 푼 것과 정답이 맞는지 비교한다.
}

 

3. Constraint

1) 0 <= nums.length <= 100

2) 0 <= nums[i] <= 50

3) 0 <= val <= 100

4) 제거 후 남은 수들의 정렬은 하지 않아도 상관 없지만, nums의 맨 앞부터 채워놔야 한다.

5) 맨 앞부터 채우고 남은 뒷부분은 어떤 숫자로 채워도 상관없다.

6) 추가 메모리를 쓰지 않고 O(1)으로 문제를 풀어야 한다.

 

4. Example

Input: nums={3,2,2,3}, val=3 -> Output: 2, 이때의 nums={2,2,_,_}

설명: 처음 nums에서 val3을 제거하면 {_, 2, 2, _}가 되는데, 이때 nums의 맨 앞부터 남은 숫자를 채워야하므로 {2, 2, _, _}가 되어야 한다. 숫자가 2개가 남았으므로 2를 반환한다.

 

5. Code

1) 첫 코드(2022/12/02)

int k = nums.length, index = 0;
while(index<nums.length){
    if(nums[index]!=val){
        index++;
    }else{
        for(int i=index+1 ; i<k ; i++)
            nums[i-1] = nums[i];
            nums[k-1] = -1; k--;
    } // else
} // while
return k;