728x90
여기서 압축은 전체 좌표에서 해당 좌표값보다 작은 좌표의 개수(중복 제거)로 줄이는 것을 의미한다.
그래서 벡터를 두 개 이용해서 하나의 벡터에 중복된 값을 제거, 정렬을 해준 후, 이분 탐색을 통해 개수를 구했다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> v, v1;
int N, num;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> num;
v.push_back(num);
v1.push_back(num);
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for (int i = 0; i < v1.size(); i++) {
int start = 0;
int end = v.size();
while (1) {
int mid = (start + end) / 2;
if (v[mid] == v1[i]){
cout << mid << " ";
break;
}
else if (v[mid] > v1[i]) {
end = mid - 1;
}
else if (v[mid] < v1[i]) {
start = mid + 1;
}
}
}
}
unique 함수를 배워서 사용해보았다.
v.erase(unique(v.begin(), v.end()), v.end()); 를 해주면 벡터 내에서 중복된 값을 제거해준다.
728x90
'문제 풀이 > 백준 알고리즘' 카테고리의 다른 글
[baekjoon 1916] 최소비용 구하기 - 그래프, 다익스트라 (C++) (0) | 2021.01.14 |
---|---|
[baekjoon 9095] 1, 2, 3 더하기 - DP(동적 프로그래밍) (C++) (0) | 2021.01.11 |
[baekjoon 11726] 2xN 타일링- DP(동적 프로그래밍) (C++) (0) | 2021.01.03 |
[baekjoon 7662] 이중 우선순위 큐 - Map, MutliMap (C++) (0) | 2021.01.02 |
[baekjoon 10816] 숫자 카드2 - Hashmap, 이분탐색 (C++) (0) | 2021.01.01 |