3 분 소요

🗒️ 18870번) 좌표 압축

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

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int N;
	cin >> N;

	queue<int> nums;
	vector<int> vec;
	vec.reserve(N);
	for (int i = 0; i < N; i++)
	{
		int n;
		cin >> n;
		vec.push_back(n);
		nums.push(n);
	}

	sort(vec.begin(), vec.end());                           // 1. 정렬
	vec.erase(unique(vec.begin(), vec.end()), vec.end());   // 2. 중복제거

	while (!nums.empty())
	{
		int count = lower_bound(vec.begin(), vec.end(), nums.front()) - vec.begin(); // 3. 인덱스 알아내기
		cout << count << ' ';
		nums.pop();
	}

	return 0;
}

좌표 압축 문제 풀이 순서

  • 정렬(sort) → 중복제거(erase, unique) → 인덱스 알아내기(lower_bound()-begin())

카테고리:

업데이트:

댓글남기기