백준 18870 좌표 압축

supway·2022년 2월 26일
0

백준

목록 보기
43/62

백준 18870

vector의 중복된 원소를 제거할 때, unique 사용하면 편리

unique 함수는 연속된 같은 숫자를 다 날려준다.

unique 함수는 제거되지 않은 마지막 원소의 다음 원소의 iter 값이 반환됨 ( 필요 없는 값들의 첫 번째 원소의 iter)으로 erase 함수를 이용해서

erase(unique(v.begin(),v.end()),v.end())

이런 식으로 vector에서 중복된 원소들을 제거 가능 하다

#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v1, v2,v3;
int main() {
	ios::sync_with_stdio(0); cin.tie(0);

	cin >> n;

	while (n--) {
		int x;
		cin >> x;
		v1.push_back(x);
		v2.push_back(x);
	}

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

	/*for (int i = 0; i < v2.size()-1; i++) {
		if (v2[i] != v2[i + 1]) v3.push_back(v2[i]);
	}
	v3.push_back(v2[v2.size() - 1]);*/

	v2.erase(unique(v2.begin(), v2.end()),v2.end()); // unique 연속된 중복 원소를 vector의 끝으로 쓰레기값으로 보냄

	for (auto c : v1) {
		auto it = lower_bound(v2.begin(), v2.end(), c);
		cout << it - v2.begin() << ' ';
	}
}
profile
개발잘하고싶은사람

0개의 댓글