728x90
반응형
https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> v[i];
}
vector<int> tmp(v);
sort(tmp.begin(), tmp.end());
tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end());
for (int i = 0; i < n; i++) {
auto idx = lower_bound(tmp.begin(), tmp.end(), v[i]);
cout << idx - tmp.begin() << " ";
}
return 0;
}
원본 벡터를 입력받고 원본 벡터를 복사한 벡터를 만들어 정렬한 후 unique 함수로 중복 값을 제거해준다. lower_bound 함수를 통해 원본 벡터의 i번째 원소가 복사한 벡터에서 몇 번째에 위치하는지 확인하고, lower_bound의 반환값에서 시작 주소값을 뺀 값이 답이다.
벡터의 크기를 지정하지 않고 for문을 돌리면 "vector subscript out of range" 오류가 발생하므로 처음 벡터를 선언할 때 크기를 n으로 지정해주어야 한다.
728x90
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[BOJ] 23028번 5학년은 다니기 싫어요 (C++) (0) | 2022.02.02 |
---|---|
[BOJ] 20291번 파일 정리 (C++) (0) | 2022.02.02 |
[BOJ] 10988번 팰린드롬인지 확인하기 (C++) (0) | 2022.01.28 |
[BOJ] 7576번 토마토 (C++) (0) | 2022.01.28 |
[BOJ] 2644번 촌수계산 (C++) (0) | 2022.01.28 |