최신 글
10
제목 게시일
5

[백준] 18870번 : 좌표 압축

profile
코우
2021-03-31 12:20
조회 수 : 2624

출처 : 백준

문제 보러가기 : 좌표 압축


좌표 압축 문제는 각각의 좌표보다 작은 값들의 개수를 알아내는 비교적 단순한 문제이다.

해당 문제는 정렬과 lower_bound함수를 사용해서 해결할 수 있었다.

 

해결 


1. 우선적으로 좌표 입력 순서를 담는 vector V와 정렬 용도의 vector S를 각각 생성한다.

2. S를 Algorithm STL이 제공해주는 sort함수를 이용하여 정렬 후 unique함수로 중복되는 원소를 제거해준다.
    -> 주의 : unique함수는 정렬 후 사용해야 한다.

3. S에 대해서 lower_bound 함수를 통해 V에 저장된 각각의 좌표 순서대로 주소를 가져온 후 S의 시작 주소를 빼준 값을 출력한다. 
    -> lower_bound : 최초로 나타나는 값의 위치를 반환
 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include 
#include 
#include 
using namespace std;
 
int main() {
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    int n, x;
    vector v;    // 입력 순서 저장
    vector s;    
 
    cin >> n;
 
    for (int i = 0; i < n; i++) {
        cin >> x;
 
        v.push_back(x);
        s.push_back(x);
    }
 
    sort(s.begin(), s.end());
 
    s.erase(unique(s.begin(), s.end()), s.end());
 
    for (int i = 0; i < n; i++) {
        int temp = lower_bound(s.begin(), s.end(), v[i]) - s.begin();    // 좌표의 위치 - 시작 주소 = 좌표보다 작은 서로다른 좌표들의 개수 
        cout << temp << " ";
    }
 
    return 0;
}
cs
share
twitter facebook kakao naver
댓글