https://www.acmicpc.net/problem/3052
나머지를 vector에 삽입하고 sort(), unique()와 erase()를 이용하여 중복 제거를 한 후 vector의 사이즈를 출력하였다.
unique()는 앞에서부터 unique한 원소들을 채우고, 나머지 원소들은 뒤로 보낸 후 unique한 원소 다음의 포인터를 리턴한다.
주의할 점은 해당 vector가 정렬된 상태여야한다는 점이다.
예를 들어 vector에 1, 1, 2, 3, 3, 3, 4, 4, 5, 5, 5가 들어있으면
unique()를 수행한 후 1, 2, 3, 4, 5, 1, 3, 3, 4, 5, 5가 되며, 6번째 원소의 포인터를 리턴한다.
그럼 6번째 원소의 포인터부터 vector의 마지막 원소 포인터까지 erase()하면 중복이 제거된 결과 1, 2, 3, 4만 남게 된다.
#include <iostream>
#include <ios>
#include <vector>
#include <algorithm>
#define ARRAY_SIZE 10
using namespace std;
int numbers[ARRAY_SIZE];
vector<int> remainders;
int main() {
cin.tie(0);
ios::sync_with_stdio();
for(int i=0; i<ARRAY_SIZE; i++) {
cin >> numbers[i];
remainders.push_back(numbers[i]%42);
}
sort(remainders.begin(), remainders.end());
remainders.erase(unique(remainders.begin(),remainders.end()),remainders.end());
// unique는 중복 제거를 하고, 마지막 원소의 iterator값 리턴
// 앞에서부터 unique한 원소들로 채우고, 나머지는 뒤에 몰아넣고 뒤에 몰아 넣은 첫 원소의 포인터 리턴
cout << remainders.size();
return 0;
}
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 1181. 단어 정렬 (0) | 2020.03.25 |
---|---|
[BOJ] 11866. 요세푸스 문제 0 (0) | 2020.03.25 |
[BOJ] 10989. 수 정렬하기 3 (Counting Sort) (0) | 2019.04.28 |
[BOJ] 2750. 수 정렬하기 (Bubble Sort) (0) | 2019.04.27 |
[BOJ] 1934. 최소공배수 (0) | 2019.04.23 |
댓글