티스토리 뷰

#include<algorithm>
using namespace std;

vector<int> solution(vector<int> arr) 
{
    arr.erase(unique(arr.begin(), arr.end()), arr.end());
    vector<int> answer = arr;
    return answer;
}

 

새로 배운 것

 

erase(start, end)

vector.erase(start, end) : start 부터 end 바로 이전까지 삭제한다.

vector.erase(start) 하면 start에 있는 값 하나만 삭제한다.

반복자를 사용하면 삭제된 문자 다음을 가리키는 반복자를 반환한다.

반복자를 사용하지 않으면, 삭제된 문자열이 반환된다.

 

unique(begin, end)

범위 내(begin ~ end)에 중복된 원소를 제거한다.

하지만 중복된 원소 중에서 첫번째 원소만 남기고 삭제한다.

지워지지않은 마지막 원소의 반복자를 반환한다.

주의점

- 중복되는 원소를 벡터 뒤에 넣기 때문에 반환되는 반복자를 erase로 제거하던지 resize 해야한다.

- "같은 숫자는 싫어" 문제의 경우, 전체적인 중복이 아닌 연속적으로 나오는 중복 숫자만 제거하면 된다.

- 하지만, 전체적인 중복 제거를 위해서는 정렬한 이후에 unique 처리해야한다.

 

 

댓글