PS/정렬 알고리즘[Sort]

18870 좌표 압축(c++)

SeungbeomKim 2022. 7. 13. 19:56

https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

<코드>

#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin>>n;
	vector<int>v;
	vector<int>v2;
	for(int i=0;i<n;i++)
	{
		int num;
		cin>>num;
		v.push_back(num);
		v2.push_back(num);
	}
	sort(v2.begin(),v2.end());
	v2.erase(unique(v2.begin(),v2.end()),v2.end());
	for(int i=0;i<v.size();i++)
	{
		cout<<lower_bound(v2.begin(),v2.end(),v[i])-v2.begin()<<' ';
	}
	

	
}

<풀이 과정>

문제를 풀기 위해 lower_bound, upper_bound가 사용되어야 한다.

lower_bound(배열의 첫번째 주소(v.begin()), 배열의 마지막 주소(v.end()),찾을 값 value)

찾을 값을 발견 하게되면 각각의 함수가 찾은 값(value)의 주소를 반환한다.

처음 value값을 만나게 되는 인덱스의 주소를 반환한다는 의미이다.

upper_bound(배열의 첫번째 주소(v.begin()), 배열의 마지막 주소(v.end()),찾을 값 value)

찾을 값을 발견 하게되면 각각의 함수가 찾은 값(value)의 주소를 반환한다.

value값보다 커진 값의 첫 번째 인덱스의 주소를 반환한다는 의미이다.

 

주소를 반환하기에 첫 번째 인덱스의 주소를 빼주면 인덱스만 반환할 수 있게 된다.

ex) lower_bound(v2.begin(),v2.end,v[i])-v2.begin() 

'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글

백준 2776 암기왕(c++)  (0) 2022.07.18
백준 1015 수열 정렬(c++)  (0) 2022.07.17
백준 20291 파일 정리(c++)  (0) 2022.07.12
백준 1374 강의실(c++)  (1) 2022.07.11
백준 5635 생일(c++)  (0) 2022.07.07