※ unique 함수
- 벡터에서 중복원소를 제거할 때, sort, erase, unique 기능을 적절히 활용하여 제거할 수 있기에
unique 함수의 사용은 익혀야 할 필요성이 두드러진다 생각한다.
- 또한 int가 아닌 char형도 가능하다는 점에서 대단히 유용하다.
cf. 만약, sort하지말고 중복원소를 제거하라면 set + assign함수를 사용한다.
(set은 중복 원소를 허용하지 않는 컨테이너기 때문이다.)
https://scarlettb.tistory.com/70
[백준 13915번: https://www.acmicpc.net/problem/13915]
13915번: 현수의 열기구 교실
현수는 열기구 여름특강의 강사다. 현수는 매우 성실해서 모든 수강생들의 열기구 비행을 기록하고있다. 매 비행 이후, 현수는 그 비행에 참석한 수강생들의 기록을 리스트에 추가한다. 리스트
www.acmicpc.net
§ unique의 원리
- "정렬된" 원소에 대해 vector의 제일 뒷부분으로 쓰레기값으로 보내버린다.
- 따라서 "정렬"되어야 하므로 sort를 사용해야한다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N; cin >> N;
vector<int> v;
for(int i = 0; i < N; i++){
int num; cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
unique(v.begin(), v.end());
for(auto x:v)
cout << x << " ";
}
input >> 1 4 3 2 2 3 1 5 3 5 4
output << 1 2 3 4 5 3 3 4 5 5
앞에 1 2 3 4 5가 정렬된 이후 뒤 숫자는 아무렇게나 쓰레기값이 들어간 것을 알 수 있다.
§ 중복원소제거 정렬
따라서 정렬 후 erase와 unique로 삭제할 수 있다.
다음과 같이 작성하면 된다.
sort(v.begin(), v.end());
v.erase( unique(v.begin(), v.end()), v.end() );
※ 중복된 원소 제거 => sort, erase(unique())
[백준 10867번: https://www.acmicpc.net/problem/10867]
10867번: 중복 빼고 정렬하기
첫째 줄에 수의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다.
www.acmicpc.net
[숫자벡터에 대한 중복 원소 제거]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N; cin >> N;
vector<int> v;
for(int i = 0; i < N; i++){
int num; cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for(auto x:v)
cout << x << " ";
}
[문자벡터에 대한 중복 원소 제거]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
vector<char> s;
for (int i = 0; i < 10; i++) {
char c; cin >> c;
s.push_back(c);
}
sort(s.begin(), s.end());
s.erase(unique(s.begin(), s.end()), s.end());
for(auto x:s)
cout << x << " ";
}
'Algorithms > Algorithm skill' 카테고리의 다른 글
[Math Algorithm특강_Basic]_약수,배수, 최빈, 회문, 부분합, 일정구간 연속값찾기, 에라토스테네스의 체 (0) | 2022.11.07 |
---|---|
this.algorithm(5). C 표준 라이브러리 <cmath> ★★☆ (0) | 2022.11.03 |
this.algorithm(3). C++ 코테에서 시간초과에 잘 안걸리는 함수 (0) | 2022.11.03 |
this.algorithm(2). merge() 함수, copy() max(), min() 함수 ★★★★★ (0) | 2022.11.02 |
this.algorithm(1). 문자열 처리 (0) | 2022.10.31 |