본문 바로가기

Algorithm/TIP

[c++] unique함수

728x90

 

코딩테스트에서 중복을 제거할 일이 있었는데 

레퍼런스로 unique라는 함수가 있다는 것을 알게되었다

근데 사용방법을 몰라서 못썼음 ㅠ..ㅋㅋ 

 

 

unqiue함수 

 

헷갈릴 수 있지만, unique함수는 중복을 찾아준다! 느낌보다는 중복되지 않는 원소들을 찾아준다 는게 조금더 정확하다

 vector배열 내에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수이다.

하지만 서로 이웃하면서 중복인 원소들에 대해서만 작동하기 때문에 제대로 사용하기 위해서는 sort함수를 사용한 후에 사용해주어야 한다.

 

vector<int> arr = {2, 2, 3, 3, 1, 5, 6, 6};


sort(arr.begin(), arr.end());
//1, 2, 2, 3, 3, 5, 6, 6


unique(arr.begin(), arr.begin());
//1 2 3 5 6 2 3 6

이와같이 중복되지 않는 원소들을 앞부터 채우고, 중복인 원소들은 뒤로 미룬다.

 

그리고 중복인 원소들이 저장된 곳의 index를 반환한다. ( 위의 예에서는 5) 

 

따라서 보통의 사람들이 원하는 특정 배열에서 중복을 전부 제거하는 것은 이렇게

sort(arr.begin(), arr.end());


erase(unique(arr.begin(), arr.end()), arr.end()); // 중복이 시작되는 지점부터 끝까지를 제거

하면된다 

 

728x90