[C++] 백준(BOJ) - 18870번 좌표 압축
2022. 2. 21. 18:00
풀이 코드
배열 a,b를 만들어 숫자들을 저장한 다음, 배열 a를 오름차순 정렬한다.
그 다음, map을 이용하여 압축된 코드를 저장한다.
map의 find 함수를 사용하면 찾고자 하는 값의 iterator을 가져오고,
만일 찾고자 하는 값이 없다면 map.end()을 반환한다.
map을 순회하면서 a[i]가 있다면 k값을 할당하고, 없다면 ++k 값을 할당한다.
출력은 배열 b를 이용하여 map을 순회하면서 한다.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define num 1000001
map<int,int> m;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n=0;int a[num]={0}; int b[num]={0}; int k=0;
cin >> n;
for(int i=0;i<n;i++){
cin >>a[i];
b[i]=a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++) {
if(m.find(a[i])==m.end()){
m[a[i]] = ++k;
}
else{
m[a[i]] = k;
}
}
for(int i=0;i<n;i++){
cout<<m[b[i]]-1;
cout<<' ';
}
cout<<'\n';
return 0;
}
문제
https://www.acmicpc.net/problem/18870
'Algorithm' 카테고리의 다른 글
[C++ STL] std::vector 사용법과 동작방식 (0) | 2022.05.15 |
---|---|
[C++] 백준(BOJ) - 8892번 팰린드롬 (0) | 2022.02.28 |
[C++] 백준(BOJ) - 1448번 삼각형 만들기 (0) | 2022.02.28 |
[C++] 백준(BOJ) - 11055번 가장 큰 증가 부분 수열 (0) | 2022.02.27 |
[C++] 백준(BOJ) - 1421번 시리얼 번호 (0) | 2022.02.21 |