https://www.acmicpc.net/problem/18870
이 문제는 해당 원소의 값보다 작은 서로 다른 좌표의 개수가 몇개인지 출력해주면 되는 문제이다. 그렇기 때문에 벡터
입력을 받은 다음 새로운 벡터를 만들어서 값을 복사한 다음 그 벡터를 정렬하고 중복되는 원소를 제거한 다음 그 벡터에서해당 원소의 위치를 저장해주면 되는 문제이다.
정답코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> v(n);
vector<int> sorted_v;
// 좌표 입력받기
for (int i = 0; i < n; i++) {
cin >> v[i];
sorted_v.push_back(v[i]);
}
// 중복 제거 후 정렬
sort(sorted_v.begin(), sorted_v.end());
sorted_v.erase(unique(sorted_v.begin(), sorted_v.end()), sorted_v.end());
// 좌표 압축 적용: 각 값의 압축된 인덱스를 저장
map<int, int> compression;
for (int i = 0; i < sorted_v.size(); i++) {
compression[sorted_v[i]] = i;
}
// 원래 좌표에 대해 압축된 결과 출력
for (int i = 0; i < n; i++) {
cout << compression[v[i]] << " ";
}
return 0;
}
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][C++]14425번. 문자열 집합 (1) | 2024.09.26 |
---|---|
[백준][C++]10815번. 숫자 카드 (0) | 2024.09.25 |
[백준][C++]10814번. 나이순 정렬 (2) | 2024.09.23 |
[백준][C++]1181번. 단어정렬 (0) | 2024.09.23 |
[백준][C++]11651번. 좌표 정렬하기 2 (0) | 2024.09.20 |