본문 바로가기
Programming Solve/BOJ

BOJ 18870 - 좌표 압축 / C++

by msm1029 2022. 4. 17.
반응형

문제 링크 : https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net

 

 

풀이

입력받은 배열을 정렬한 뒤 0부터 차례대로 우선순위를 매긴다. 중복되는 수들은 건너뛴다.

map 자료구조에 key 값은 수(좌표), value는 우선순위를 넣어준 다음

원래 배열의 순서대로 우선순위를 알맞게 출력한다.

 

코드

#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);

    map<int, int> m;
    vector<int> v;
    vector<int> ans;
    int n;
    
    cin >> n;
    for(int i=0; i<n; i++){
        int tmp;
        cin >> tmp;
        v.push_back(tmp);
    }
    ans = v;
    sort(v.begin(), v.end());

    m.insert(make_pair(v[0], 0));
    int cnt = 1, prior = v[0];
    for(int i=1; i<v.size(); i++){
        if(v[i] == prior) continue;
        else {
            m.insert(make_pair(v[i], cnt++));
            prior = v[i];
        }
    }

    for(int i=0; i<ans.size(); i++){
        cout << m[ans[i]] << ' ';
    }
}
반응형

'Programming Solve > BOJ' 카테고리의 다른 글

BOJ 1074 - Z / C++  (0) 2022.04.21
BOJ 16928 - 뱀과 사다리 게임 / C++  (0) 2022.04.18
BOJ 15829 - Hashing / C++  (0) 2022.04.14
BOJ 10816 - 숫자 카드 2 / C++  (0) 2022.04.13
BOJ 2609 - 최대공약수와 최소공배수 / Swift  (0) 2022.04.11