CodingTest/백준
백준 18870 - 좌표 압축(C++)
빵아찌
2022. 6. 2. 15:41
문제를 읽고 vector를 2개를 두고
정렬한 후에 unique로 제외하여 lower_bound를 사용하여
풀이가 가능할 것 같았지만 괜히 unique를 안쓰고 싶어져서 코드가 더럽다.
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int iN = 0;
int main()
{
cin >> iN;
vector<int> vUnorder;
map<int, vector<int>> map_Order;
vUnorder.reserve(iN);
int iTemp = 0;
for (int i = 0; i < iN; i++)
{
cin >> iTemp;
vUnorder.emplace_back(iTemp);
if (map_Order.find(iTemp) != map_Order.end())
map_Order.find(iTemp)->second.emplace_back(i);
else
map_Order.emplace(iTemp, vector<int>(1, i));
}
auto iter_map = map_Order.begin();
for (int i = 0; i < map_Order.size(); i++)
{
int iNum = iter_map->first;
for (int j = 0; j < map_Order[iNum].size(); j++)
vUnorder[map_Order[iNum][j]] = i;
iter_map++;
}
for (int i = 0; i < iN; i++)
cout << vUnorder[i] << " ";
cout << "\n";
return 0;
}
map을 사용하여 중복을 제거하고 물론 옳은 방법은 아닌거 같다
map의 key를 사용하여 정렬된 순서로 0부터 순차적으로 압축한 값을 출력하였다.