배열에서 중복된 원소를 없앤 후 정렬을 해주면 된다고 생각함.
그리고 미리 또다른 배열을 만들어 입력 좌표를 미리 저장한 후 정렬/중복원소 삭제된 배열에서 찾는 알고리즘을 생각해냈다.
또 찾을 때 이중for문을 이용하기 보단 vector stl에 있는 find를 쓸려고 했고, 사용해보니 시간 초과가 났다. 그리서 lower_bound를 사용하여 풀었다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int N;
cin >> N;
vector <int> v(N);
for(int i=0;i<N;i++){
cin >> v[i];
}
vector<int> v2 = v;
sort(v.begin(),v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for(int i=0;i<N;i++){
int k=v2[i];
cout << lower_bound(v.begin(), v.end(), k) - v.begin() << ' ';
}
return 0;
}
'백준' 카테고리의 다른 글
[백준][C++]10816 (0) | 2024.03.30 |
---|---|
[백준][C++]11866 (0) | 2024.03.19 |
[백준][C++]2164 (2) | 2024.03.18 |
[백준][C++]11659 (1) | 2024.03.17 |
[백준][C++]17626 (2) | 2024.03.15 |