#include <iostream>
#include <vector>
#include <algorithm> // std::unique <- 벡터의 중복 요소 삭제
using namespace std;
int main(int argc, char **argv){
int N;
scanf("%d",&N);
vector<int> v(N); // N개의 벡터 생성 -> segfault
for(int i=0; i<N; i++){
scanf("%d",&v[i]);
}
sort(v.begin(), v.end()); // 정렬 먼저 해줘야함.
v.erase(unique(v.begin(), v.end()), v.end());
// 중복 원소를 vector의 제일 뒷부분 쓰레기 값으로 보냄 -> 이 뒷부분 erase로 삭제
// unique 함수는 앞과 뒤 원소를 비교하기 때문에 무조건 먼저 정렬을 해줘야한다.
for(int i = 0; i < v.size(); i++){
printf("%d ",v[i]);
}
return 0;
}
STL 사용 연습 문제. vector, sort, erase, unique를 사용하였다.
주석에도 작성하였지만, 중복되는 것을 삭제하고 정렬하려면 먼저 정렬을 한 뒤 unique를 사용하여 중복되는 것을 맨 뒷부분 쓰레기 값으로 보내고, 해당 위치부터 맨 뒤까지 erase를 이용하여 삭제해주어야한다. 처음에 sort를 먼저 안했는데 삭제가 안되기에 의아했는데 unique 함수는 앞과 뒤 원소를 비교하기 때문에 무조건 먼저 정렬을 해줘야한다.