BOJ

[BOJ] 18870번 - 좌표 압축

곰제비 2022. 6. 13. 18:12

<접근 방식>

주어진 값에 대하여 중복을 허용하여 순서를 매기는 문제이다.

간단하게 sort(), vector와 pair 클래스를 이용하여 해결했다.

-- pair<first, second>

 

pair구조체를 sort할 경우 first를 기준으로 오름차순을 진행하고 second값은 first값을 따라간다.

입력값 tmp vector
tmp.first tmp.second
2 0
4 1
-10 2
4 3
-9 4

 

정렬된 tmp vector
tmp.first tmp.second
-10 2
-9 4
2 0
4 1
4 3

 

tmp vector의 num값 중복을 고려한 res vector 입력
res.first res.second
2 0
4 1
0 2
1 3
3 3

 

정렬된 res vector
res.first res.second
0 2
1 3
2 0
3 3
4 1

<전체 코드>

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;


vector<pair<int, int>> tmp, res;

int main()
{
	int N, num, count = 0;
	cin >> N;

	for (int i = 0; i < N; i++) {
		cin >> num;
		tmp.push_back({ num, i });
	}

	sort(tmp.begin(), tmp.end());
	res.push_back({ tmp[0].second, count });

	for (int i = 1; i < N; i++) {
		if (tmp[i - 1].first == tmp[i].first)
			res.push_back({ tmp[i].second, count });
		else
			res.push_back({ tmp[i].second, ++count });
	}
	sort(res.begin(), res.end());
	for (int i = 0; i < N; i++)
		cout << res[i].second << " ";
}

<문제 링크>

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

 

18870번: 좌표 압축

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

www.acmicpc.net