백준/실랜디, 골랜디

[백준] C++ 좌표압축(18870)

2zreal 2024. 12. 27. 21:37

 

문제풀이방법

1. 중복을 제거하기 위해 Hashmap을 선언하고 arr, arr2배열을 선언하였다(arr2가 원본배열)

2. 만약 이전에 입력이 되지 않았다면 arr에 요소를 추가해 주었다(중복 방지).

3.sort함수를 통해 요소를 정렬한다(arr를 정렬 - arr는 중복이 제거된 배열임-).

4.HashMap에 정렬된 요소의 순서를 넣는다.

5.HashMap에 저장된 값 이용해서 arr2 원본배열을 좌표를 출력한다.

 

이 방식은 시간, 공간복잡도 측면에서 효율성이 떨어진다.

더 좋은 방식으로 다음번에 한번 풀어보도록 하겠다.(다른 분들의 코드를 보니 erase를 이용해서 중복을 제거하고 lower_bound를 이용해서 요소값의 위치를 찾음....)

 

#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;

int arr[1000001];
int arr2[1000001];

int main(void)
{
	int num = 0;
	unordered_map<int,int> hashMap;

	cin >> num;
	int l = 0;
	for (int i = 0; i < num; i++)
	{
		int k = 0;
		cin >> k;
		arr2[i] = k;
		if (hashMap[k] == 0)
		{
			arr[l] = k;
			hashMap[k]++;
			l++;
		}
	}

	sort(arr, arr + l);

	for (int i = 0; i < l; i++)
	{
		hashMap[arr[i]] = i;
	}

	for (int i = 0; i < num; i++)
	{
		cout << hashMap[arr2[i]] << " ";
	}

	return 0;
}

//입력을 받고 정렬을 한다??

'백준 > 실랜디, 골랜디' 카테고리의 다른 글

[백준] 쉬운 최단거리(14940)  (0) 2024.12.29
[백준] C++ RGB거리(1149)  (0) 2024.12.28
[백준] C++ AC(5430)  (1) 2024.12.27
[백준] 스택 수열(1874)  (1) 2024.12.26
[백준] 나무 자르기(2805) *  (0) 2024.12.26