[ LeetCode | Java ] 27. Remove Element

dokim·2023년 8월 24일
post-thumbnail

🏷️27. Remove Element


1. 문제 설명

  • 정수 배열 nums와 정수 val이 주어지면 nums에서 val의 모든 발생을 제거합니다. 요소의 순서는 변경될 수 있습니다. 그런 다음 nums에 대해 val과 같지 않은 요소의 수를 반환합니다.

  • nums에서 val과 같지 않은 요소의 수를 k라고 가정하면, 수락되기 위해 다음 작업을 수행해야합니다:

    • nums 배열을 변경하여 nums의 처음 k개 요소에는 val과 같지 않은 요소가 포함됩니다. nums의 나머지 요소와 nums의 크기는 중요하지 않습니다.
    • k를 반환합니다.

예시 1:

입력: nums = [3,2,2,3], val = 3
 출력: 2, nums = [2,2,_,_]
 설명: 함수는 k = 2를 반환해야 하며 nums의 처음 두 요소는 다음과 같습니다. 2. 
반환된 k 외에 무엇을 남겨두는지는 중요하지 않습니다(따라서 밑줄로 표시됩니다).

예시 2:

입력: nums = [0,1,2,2,3,0,4,2], val = 2
 출력: 5, nums = [0,1,4,0,3,_,_,_]
 설명: 함수는 k = 5를 반환해야 하며 숫자의 처음 5개 요소는 0, 0, 1, 3, 4를 포함해야 합니다. 
5개 요소는 어떤 순서로든 반환될 수 있습니다. 
반환된 k 외에 무엇을 남겨두는지는 중요하지 않습니다(따라서 밑줄로 표시됩니다).

2. 접근 방식

  • nums배열을 반복문으로 돌면서 정수val와 비교합니다.
  • 정수val와 다른 정수를 찾으면 nums 배열 첫번째 index에 데이터를 저장합니다.
  • 다음에 정수val와 다른 정수를 찾으면 두번째 index에 저장하는 방식으로 코드를 작성합니다.
  • int k를 선언하여 정수val와 다른 정수이면 1씩 증가합니다.

3. 의사 코드

	int k = 0;
    int index = 0;
	for(nums배열 처음부터 끝까지 탐색){
    	if(nums[i] != val){
        	k++;
            nums[index++] = num[i];
        }
    }
    return k;

4. 구현 코드

class Solution {
    public int removeElement(int[] nums, int val) {
  
        
        int k = 0;
        int index = 0;
	    for(int i =0; i < nums.length; i++){
    	    if(nums[i] != val){
                k++;
                nums[index++] = nums[i];
            }
        }
    return k;
    }
}
  • 시간 복잡도: O(n)
  • 공간 복잡도: O(1)

5. 개선 사항

class Solution {
    public int removeElement(int[] nums, int val) {

        int k = 0;
	    for(int i =0; i < nums.length; i++){
    	    if(nums[i] != val){
                nums[k++] = nums[i];
            }
        }
    return k;
    }
}
  • 이전 코드에서 if(nums[i] != val) 만족하면 index변수와 k변수를 같이 증가시키고 있습니다. 이를 k변수 하나만 사용하여 동작하도록 하였습니다.

6. 최종 회고

  • 문제를 이해하는데 시간이 좀 걸렸습니다. 아직 영문에 익숙하지 않고 leetCode의 문제에 익숙하지 않아 원하는 결과를 찾아내는데 많은 시간이 걸렸습니다..
  • leetCode는 결과값만 도출하면 되는 다른 알고리즘과 달리 반환되지 않는 변수에 대해서도 확인을 하는 것 같습니다. 이는 반환값만 확인하고 코드를 작성하는 것이 아니라 그 과정에서 사용되는 변수에 대해서도 생각을 해보라고 하는 것 같았습니다. 다음에는 결과값과 그 과정에서 변화하는 변수들에 대해서도 생각을 해보려고 합니다.

0개의 댓글