11870번: 좌표 압축

myeongrangcoding·2023년 12월 17일
0

백준

목록 보기
30/47

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

구현 13분

풀이(unordered_map)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <unordered_map>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cout.tie(nullptr);
	cin.tie(nullptr);
	//freopen("input.txt", "rt", stdin);

	int N{};
	cin >> N;

	vector<int> VecSortArray(N);
	vector<int> VecOriginArray(N);

	for (int i = 0; i < N; ++i)
	{
		cin >> VecSortArray[i];
		VecOriginArray[i] = VecSortArray[i];
	}

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

	unordered_map<int, int> UmArray;
	
	int Index{ 1 };
	for (int i = 0; i < N; ++i)
	{
		if (!UmArray[VecSortArray[i]])
		{
			UmArray[VecSortArray[i]] = Index++;
		}
	}
	
	for (int i = 0; i < N; ++i)
	{
		cout << UmArray[VecOriginArray[i]] - 1 << ' ';
	}

	return 0;
}

풀이(lower_bound)

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cout.tie(nullptr);
	cin.tie(nullptr);
	//freopen("input.txt", "rt", stdin);

	int N{};
	cin >> N;

	vector<int> VecOriginArray(N);

	for (int i = 0; i < N; ++i)
	{
		cin >> VecOriginArray[i];
	}

	vector<int> VecSortArray(VecOriginArray);

	sort(VecSortArray.begin(), VecSortArray.end());
	VecSortArray.erase(unique(VecSortArray.begin(), VecSortArray.end()), VecSortArray.end());

	for (int i = 0; i < N; ++i)
	{
		cout << (lower_bound(VecSortArray.begin(), VecSortArray.end(), VecOriginArray[i]) - VecSortArray.begin()) << ' ';
	}

	return 0;
}
profile
명랑코딩!

0개의 댓글