이 문제를 처음 접했을 때는 크기 순으로 정렬시킨 배열을 하나 더 생성하여 그 배열의 인덱스 값을 결과 배열에 넣고, 결과 배열에서 같은 값을 가진 수만큼 빼면 답을 구할 수 있을 거라고 생각했다.
이 방식은 배열의 길이가 길고 들어가는 수의 가지수가 적을 때 원하는 결과를 도출할 수 없었다.
구글링을 통해 알게 된 방식은 algorithm헤더의 unique를 사용하는 방식이다.
#include <iostream>
#include <algorithm>
#include <vector>
#define MAX 1000001
using namespace std;
int n;
vector<int> x;
vector<int> x2;
int cnt=0;
int result[MAX];
void Input(){
int a;
cin>>n;
for(int i=0; i<n; i++){
cin>>a;
x.push_back(a);
x2.push_back(a);
}
}
void Solution(){
sort(x2.begin(), x2.end());
x2.erase(unique(x2.begin(), x2.end()), x2.end());
for(int i=0; i<n; i++){
result[i]=lower_bound(x2.begin(), x2.end(), x[i])-x2.begin();
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
Solution();
for(int i=0; i<n; i++){
cout<<result[i]<<" ";
}
return 0;
}