- ์ด ๊ธ์ C++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
- ์ฒ์ ์๊ฐํ์ ๋ ์ ๋ ฌ ํ map์ ํตํด ์ค๋ณต์ ๊ฑฐํ๊ณ ๊ฐ์ key๋ก 0๋ถํฐ ํ๋์ฉ ๋ด๊ธฐ๋ count๋ฅผ value๋ก ํ์ฌ ์ถ๊ฐํ ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด map์ insert์ ์๊ฐ๋ณต์ก๋๋ O(logN), ์ดํ ์ ๋ ฌ์ ๋ํ ์๊ฐ๋ณต์ก๋ O(NlogN)์ด ๊ฑธ๋ ค ์ ์ฒด ์์ ๋ํด์ ํ์ํ ๋์ ์๊ฐ๋ณต์ก๋๋ O(N2logN)์
๋๋ค.
- ๋ค์ ํ์ด๋ ๋ฌด์กฐ๊ฑด ์๊ฐ์ด๊ณผ๊ฐ ๋ํ๋๊ฒ ๋๋๋ฐ map์ด ์๋ unordered_map์ ์ฌ์ฉํ๋ฉด ์ด์ง ๊ฒ์ ํธ๋ฆฌ๊ฐ ์๋ ํด์ฌ ํ
์ด๋ธ๋ก ๊ตฌํ์ด ๋์ด O(1)๋ง์ ํต๊ณผํ ์ ์์ต๋๋ค.
#include<iostream>
#include<vector>
#include<unordered_map>
#include<algorithm>
using namespace std;
int main(){
int arr[1000005];
int vec[1000005];
int num;
cin>>num;
for(int i=0;i<num;i++){
cin>>arr[i];
vec[i] = arr[i];
}
sort(arr, arr+num);
int idx = 0;
unordered_map<int,int> m;
for(int i=0;i<num;i++){
if(m.count(arr[i]) == 0){
m.insert({arr[i],idx++});
}
}
for(int i = 0;i<num;i++){
cout<<m[vec[i]]<<' ';
}
}
- ์ด ํ์ด๊ฐ ์๋ ์ด๋ถํ์์ผ๋ก๋ ํ ์ ์์ต๋๋ค. ๋น์ทํ๊ฒ ์ ๋ ฌํ ํ ์ค๋ณต์ ์ ๊ฑฐํฉ๋๋ค. ์ดํ lower_bound ํจ์๋ฅผ ํตํด ์ด๋ถํ์์ผ๋ก ํด๋น ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ๋ฉด ๋ฉ๋๋ค.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
int num;
cin>>num;
int origin[1000000];
vector<int> v;
vector<int> vec;
for(int i=0;i<num;i++){
cin>>origin[i];
v.push_back(origin[i]);
}
sort(v.begin(), v.end());
int s = v[0];
int idx = 0;
vec.push_back(s);
for(int i=1;i<num;i++){
if(v[i] != s){
vec.push_back(v[i]);
s = v[i];
}
}
for(int i=0;i<num;i++){
cout<<lower_bound(vec.begin(), vec.end(), origin[i]) - vec.begin()<<' ';
}
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.