vector의 unique + erase를 연습해보는 문제이다.
unique는 vector내에서 중복되는 원소들은 뒤로 보내고, 중복되는 원소가 시작하는 주소를 반환한다.
예를 들어 [1,1,2,2,3,4]에 unique를 사용하면 [1,2,3,4,1,2]가 되고 5번째 원소인 1의 주소를 반환한다.
erase는 주소의 시작과 끝, 두 개를 인자로 받고, 해당 부분의 원소를 삭제한다.
unique와 erase를 이용하면 벡터 내의 중복된 원소를 삭제하면서 순서를 그대로 유지할 수 있다.
다음 코드는 unique, erase 없이 그냥 푼 코드이고, 그 아래 코드는 unique, erase로 푼 코드이다.
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
vector<int> answer;
int before = -1;
for(auto it : arr) {
if(before < 0) {
answer.push_back(it);
before = it;
} else {
if(it == before)
continue;
answer.push_back(it);
before = it;
}
}
return answer;
}
// unique + erase
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
vector<int> solution(vector<int> arr)
{
arr.erase(unique(arr.begin(), arr.end()), arr.end());
return arr;
}