https://leetcode.com/problems/remove-element/
정수 배열 nums와 정수 val이 주어질 때 nums에 있는 모든 val 제거 후 배열에 남은 요소들 반환
반환은 남은 요소 수를 넣으면 자동으로 개수에 맞춰 output을 배열 형태로 반환
ex) 현재 nums 상태가 [2, 1, _] 이고 2를 반환하면 output은 [2, 1] 가 됨.
다른 배열 생성 안하고 input array를 O(1)의 추가 메모리로 수정해야함
이건 예제보면 어떤 순서로 반환해도 상관없다고 나온다. 그럼 해당 숫자 만나면 정렬할 때 맨뒤로 가게 되는 문자로 변환 후 최종적으로 정렬하면 되겠다고 생각.
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;
}
}
어차피 결국 한바퀴 도는건 똑같아서 의미는 없을 수 있지만.. 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;
}
}
이건 배열 값 계속 바꿔줘서 메모리 결과가 상당히 안 좋은걸 볼 수 있다 ㅎ..