728x90
반응형
목차
https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에
www.acmicpc.net
문제
문제 풀이
나는 중복을 제거해준 정렬된 배열을 따로 만들어 이분 탐색을 하는 식으로 코드를 구현했다.
코드 구현
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
vector <pair<int, int>> v; //벡터 페어로 각각 개수 저장
vector <int> sort_v; //정렬된 중복x 배열
int main()
{
int n, i, num, start, end;
cin >> n;
for (i = 0; i < n; i++) {
cin >> num;
v.push_back(make_pair(num, 0));
sort_v.push_back(num);
}
sort(sort_v.begin(), sort_v.end()); //정렬
sort_v.erase(unique(sort_v.begin(), sort_v.end()), sort_v.end()); //중복 제거
for (i = 0; i < n; i++) { //이분탐색 시작
start = 0; //시작점
end = sort_v.size() - 1; //끝점
while (start <= end) {
int mid = (start + end) / 2;
if (sort_v[mid] < v[i].first) {
start = mid + 1;
}
else if (sort_v[mid] > v[i].first) {
end = mid - 1;
}
else {
v[i].second = mid;
break;
}
}
}
for (i = 0; i < n; i++) {
cout << v[i].second<<" ";
}
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준][누적 합] 2559 수열 c++구현 (1) | 2024.03.27 |
---|---|
[백준][bfs] 10026 적록색약 c++ 구현 (1) | 2024.03.22 |
[백준][그리디] 18310 안테나 c++ 구현 (1) | 2024.03.19 |
[백준][그리디] 11501 주식 c++ 구현 (1) | 2024.03.16 |
[백준][이분 탐색] 1484 다이어트 c++구현 (1) | 2024.03.14 |