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
'Algorithm > TIP' 카테고리의 다른 글
[c++] compare 함수 (sort / priority queue) (0) | 2022.10.21 |
---|---|
[c++] get() getline()함수 - 특정 문자가 나올때 까지 입력받기 (0) | 2022.10.21 |
[c++] array 선언 초기화 (0) | 2022.09.01 |
[c++] n자리수 올림/내림/반올림 + n자리수 출력 (0) | 2022.09.01 |
[c++] char비교, string 비교 (0) | 2022.09.01 |