개발(Dev) 이야기/C++ , Python

[C++] Vector에서 Unique, erase를 활용한 중복순열

이스트버드 2020. 3. 18. 21:48
반응형
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
	int n, m;
	cin >> n >> m;						// 4 2
	vector <int> buf(n);
	for (int i = 0; i < n; i++)
		cin >> buf[i];					// 4 4 5 2
        
	sort(buf.begin(), buf.end());		// 2 4 4 5
	buf.erase(unique(buf.begin(), buf.end()),buf.end());    // 2 4 5

	cout << buf.size() << endl;			// 3
	for (int i = 0; i < buf.size(); i++) {
		cout << buf[i] << ' ';					// 2 4 5
	}

	return 0;

 

먼저 입력받은 vector를 sort로 오름차순 정렬시킨다.

이후엔 unique 명령으로 vector의 시작과 끝까지 중복을 찾아내는데 이때 제거되지 않는다.

실제로 출력해보게 되면 vector의 중복된 값이 맨 마지막에 위치하는 것을 볼 수 있다.

따라서 erase를 활용하여 적절하게 제거해주면 정상적으로 중복이 제거 된 순열 결과를 얻을 수 있다. 

 

 

반응형