<Easy> Remove Element (LeetCode : C#)

이도희·2023년 2월 28일
0

알고리즘 문제 풀이

목록 보기
22/185

https://leetcode.com/problems/remove-element/

📕 문제 설명

정수 배열 nums와 정수 val이 주어질 때 nums에 있는 모든 val 제거 후 배열에 남은 요소들 반환

반환은 남은 요소 수를 넣으면 자동으로 개수에 맞춰 output을 배열 형태로 반환

ex) 현재 nums 상태가 [2, 1, _] 이고 2를 반환하면 output은 [2, 1] 가 됨.

다른 배열 생성 안하고 input array를 O(1)의 추가 메모리로 수정해야함

  • Input
    정수 배열 nums, 정수 val
  • Output
    val 제거 후 남은 요소들 (int 반환 시 내부적으로 int[]로 변환)

예제

이건 예제보면 어떤 순서로 반환해도 상관없다고 나온다. 그럼 해당 숫자 만나면 정렬할 때 맨뒤로 가게 되는 문자로 변환 후 최종적으로 정렬하면 되겠다고 생각.

풀이

1.

  1. val 제외한 개수 정의
  2. val 만나면 '_'로 변환 및 개수 update
  3. nums 배열 정렬
public class Solution {
    public int RemoveElement(int[] nums, int val) {
        int answer = nums.Length;

        for (int i = 0; i < nums.Length; i++)
        {
            if (nums[i] == val)
            {
                answer--;
                nums[i] = '_';
            }
        }

        Array.Sort(nums);

        return answer;
    }
}

1. 결과

2.

어차피 결국 한바퀴 도는건 똑같아서 의미는 없을 수 있지만.. sort 안쓰고 그냥 swap하는 느낌의 풀이다.

제일 앞 가리키는 포인터 두고 val 아닌 값 만나면 해당 위치에 보내고 값 올리는 방식

public class Solution {
    public int RemoveElement(int[] nums, int val) {
        int currIndex = 0;

        for (int i = 0; i < nums.Length; i++)
        {
            if (nums[i] != val) 
            {
                nums[currIndex] = nums[i];
                currIndex++;
            }

        }

        return currIndex;
    }
}

2. 결과

이건 배열 값 계속 바꿔줘서 메모리 결과가 상당히 안 좋은걸 볼 수 있다 ㅎ..

profile
하나씩 심어 나가는 개발 농장🥕 (블로그 이전중)

0개의 댓글