코딩테스트

[leetcode] 27. Remove Element

nayoon 2024. 7. 18. 20:03

 

문제 링크

 

1. 문제 설명 및 결과 예측

in-place - 제자리에서

배열 내에 있는 모든 val 값을 지우고 나서 val이 전부 제거된 배열 nums의 사이즈를 반환한다.
 
이 문제의 정답 평가 기준

 

remove 한 후 배열의 사이즈가 반환되고 이것을 k라고 하며
0부터 k까지 sort한 배열이 예상값과 동일할 경우 통과

 

-> val이 아닌 값들을 배열 인덱스 k 안쪽으로 두고 그 k + 1 부터 위치할 수 있도록 함.
 
2. 예시 체크
2-1. [3, 2, 2, 3] -> [_, 2, 2, _] -> [2, 2, _, _] -> 확인 시 [2, 2] true
2-2. [0, 1, 2, 2, 3, 0, 4, 2] -> [0, 1, _, _, 3, 0, 4, _] -> [0, 1, 3, 0, 4, _, _, _] -> [0, 0, 1, 3, 4, _, _, _] -> 확인 시 [0, 0, 1, 3, 4] true
 
3. 풀이 방향
sort에서 방법을 좀 착안해서 배열에 들어갈 수 있는 가장 큰 수는 50이고 val 들어올 수 있는 가장 큰 수는 100
-> nums 내에 있는 val 값을 100보다 큰 수로 치환한 후 sort하면 인덱스 k 내에는 val과 일치하는 값이 없게 됨
 
class Solution {
    public int removeElement(int[] nums, int val) {
        int count = 0;
        for(int i = 0; i < nums.length; i++) {
            if (nums[i] == val) {
            	nums[i] = 101;
            } else {
            	count++;
            }
        }

        Arrays.sort(nums);

        return count;
    }
}

 

 

 

Solutions에서 본 간단하면서 sort를 안써도 되는 아주 좋은 풀이

 

val이 아닌 뒤의 배열 요소는 고려하지 않기 때문에 val이 아닌 값들을 전부 앞으로 끌고 오는 풀이

class Solution {
    public int removeElement(int[] nums, int val) {
        int count = 0;
        for(int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
                nums[count] = nums[i];
                count++;
            }
        }

        return count;
    }
}

'코딩테스트' 카테고리의 다른 글

[leetcode] 12. Integer to Roman  (0) 2024.07.19
[leetcode] 13. Roman to Integer  (0) 2024.07.19
[leetcode] 394. Decode String  (0) 2024.07.13
[leetcode] 735. Asteroid Collision  (0) 2024.06.28
[leetcode] 162. Find Peak Element  (0) 2024.06.28