iterator 적용
- 중복된 내용을 없애는 내용이다.
- 나는 iterator를 이용해 앞 원소와 같으면 v.erase()하는 방법을 원했지만 시간초과가 떴다.
(아마 for에서 N / erase()에서 N이 되어 O(N^2)이 되어서 그런것 같다)
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
int prev = -1;
for(auto a=arr.begin(); a != arr.end(); a++)
{
if(prev == *a)
{
a=arr.erase(a);
a--;
}
prev = *a;
}
return arr;
}
- 배열로 하면 굉장히 쉽게 풀리지만
unique()
라는 것을 찾아서 써보았다.
unique
는 2개의 매개변수를 받는다 : 중복 찾을 시작위치 , 마지막 위치
unique
자체가 중복 원소를 찾아서 없애지는 않고 중복 값들을 vector의 뒤로 밀어낸 후 그 첫 위치를 반환
- 따라서
erase
와 함께 사용해야 vector에서 중복 원소를 없앨 수 있다!!!
코드
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr)
{
arr.erase(unique(arr.begin(), arr.end()), arr.end());
return arr;
}