-
[18870] 좌표 압축BOJ 2022. 2. 3. 13:42
https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
<문제>
좌표압축은 naive로 풀기 어려울때, 다른 알고리즘을 적용하기 좋게 전처리하는 느낌인듯 싶다.
값의 범위가 상당히 줄어듦에 이점이 있어 counting sort처럼 값의 개수등을 저장하는 선형 자료구조를
MLE에 대한 걱정없이 선언할 수 있으나 압축후에는 값간의 대소관계만이 남음에 유의해야한다.
<소스코드>
123456789101112131415161718192021222324252627#include <bits/stdc++.h>using namespace std;using pi = pair<int, int>;vector<pi> v;vector<int> ans;int n;int main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cin >> n;v.resize(n);ans.resize(n);int i;for (i = 0; i < n; i++) {int x;cin >> x;v[i] = {x, i};}sort(v.begin(), v.end());int val = 0;for (i = 0; i < n; i++) {if (i != 0 && v[i - 1].first != v[i].first) val++;ans[v[i].second] = val;}for (i = 0; i < n; i++) cout << ans[i] << ' ';return 0;}cs 'BOJ' 카테고리의 다른 글
[2776] 암기왕 (0) 2022.02.04 [11779] 최소비용 구하기 2 (0) 2022.02.03 [1238] 파티 (0) 2022.02.02 [12605] 단어순서 뒤집기 (0) 2022.01.29 [10422] 괄호 (0) 2022.01.29