[알고리즘] leetcode - 27번

Ss·2025년 3월 17일

문제

  • 문제
    주어진 배열 nums에서 특정 값 val을 제거해야 합니다.
    제거한 후의 배열은 배열의 처음 부분에 남겨두고, 배열의 길이를 반환해야 합니다.
    배열에서 제거된 값은 결과에 포함되지 않아야 하며,
    반환된 길이를 기준으로 원래 배열의 처음 부분에 남은 값이 올바른 결과로 여겨집니다.
  • 조건
  1. 0 <= nums.length <= 100
  2. 0 <= nums[i] <= 50
  3. 0 <= val <= 100
  • 예시
    예제 1
    입력: nums = [3,2,2,3], val = 3
    출력: 2, nums = [2,2,,]
    설명: 배열에서 3을 제거하면 [2,2]가 남습니다. 따라서 반환 값은 2입니다.

예제 2
입력: nums = [0,1,2,2,3,0,4,2], val = 2
출력: 5, nums = [0,1,3,0,4,,,_]
설명: 배열에서 2를 제거하면 [0,1,3,0,4]가 남습니다. 따라서 반환 값은 5입니다.

풀이 결과

해결

막혔던점 혹은 이유

포인터를 뒤에서 시작을 했다. 잘 짰으면 상관이 없긴 하지만 i랑 k가 자리가 역전될때가 생겼고 그 때문에 length가 -1 이 되는 경우가 생겨서 해결 코드를 추가하느라 시간이 걸렸다.

배운점

변명을 하자면 테스트 케이스를 보고 짜다보니 꽤 복잡하게 생각했다.
답 코드를 보면 포인터를 뒤에서가 아닌 앞에서 시작했는데 이대로 진행하면 테스트케이스(답은 맞음)의 배열이 다르게 나온다.

앞으로는 테스트케이스에 집중이아닌 문제를 읽어서 거기서 말하는 답의 최적 값을 찾아봐야겠다.

런타임 가장빠른 답

class Solution {
  int removeElement(List<int> num, int val) {
    int c=0;
    for(int i=0;i<num.length;i++)
    {
        if(num[i]!=val)
        {
            num[c]=num[i];
            c++;
        
    }
    }
        return c;
  }
}

메모리 가장 적은 답

class Solution {
  int removeElement(List<int> nums, int val) {
    nums.removeWhere((elements)=> elements==val);
    return nums.length;
  }
}

0개의 댓글