이 문제를 보고 든 생각은 벡터를 두개 사용하여 하나는 그대로 다른 하나는 중복이 없고 순서대로 정렬된 벡터를 사용하여 비교하면서 출력하면 되겠다는 생각을 하고 풀었다.
벡터내에 중복이 없는 코드를 짜려면
b.erase(unique(b.begin(), b.end()), b.end());
이런식으로 erase와 unique 를 사용하여 중복을 없애준다.
처음에 원소들을 받고 벡터를 복사 후 중복이 없고 순서대로 정렬된 벡터를 만들고
lower_bound 함수를 통해 index를 쉽게 구할 수 있었다.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cout.tie(0);
cin.tie(0);
int cnt;
cin >> cnt;
vector<long long> c;
while (cnt--) {
long long num;
cin >> num;
c.push_back(num);
}
vector<long long>b;
b = c;
sort(b.begin(), b.end());//순서대로 정렬
b.erase(unique(b.begin(), b.end()), b.end());//중복값 제거
for (int i = 0; i < c.size(); i++) {
cout << lower_bound(b.begin(), b.end(), c.at(i)) - b.begin() << " "; //index 구하기
}
}
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 2667번 문제풀이 (0) | 2021.03.20 |
---|---|
[C++] 백준 2579번 문제풀이++] 백준 2579번 문제풀이 (0) | 2021.03.20 |
[C++] 백준 11726번 문제풀이 (0) | 2021.02.22 |
[C++] 백준 11724번 문제풀이 (0) | 2021.02.22 |
[C++] 백준 11279번 문제풀이 (0) | 2021.02.22 |