백준 18870 좌표 압축
2023. 6. 23. 11:56ㆍ코딩 공부 연습
반응형
오늘 푼 문제에서는 cpp 에서 안써본 문법들을 잔뜩 썼다.
다시 쓸일이 있을지는 모르겠다만 기록으로 남겨두자!!
우선 lower_bound
이진탐색기반으로 해당하는 값보다 크거나 같은값이 제일 처음 등장하는 곳 위치를 리턴. (정렬 전제)
또 중요한 내용이이 unique 와 erase 를 사용해서 벡터에서 중복되는 값들을 없애는 것이었다. 코드로 보자!
#include <iostream>
#include <vector>
#include <algorithm>
#include <utility>
using namespace std;
map<int, int> ranks;
int main()
{
int n, tmp;
vector<int> input;
vector<int> input2;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> tmp;
input.push_back(tmp);
input2.push_back(tmp);
}
sort(input2.begin(), input2.end());
input2.erase(unique(input2.begin(), input2.end()), input2.end());
for (int i = 0; i < n; i++)
{
cout<< lower_bound(input2.begin(), input2.end(), input[i]) - input2.begin() << " ";
}
return 0;
}
v.erase(unique(v.begin(), v.end()), v.end());
unique 함수를 사용하면 벡터에서 중복되지 않은 값들이 차곡차곡 벡터 제일 앞부터 채워지고 종료가 된다.
그런데 문제는 뒤에 남는 값들이 보존된다는 것!
그렇기 때문에 erase 함수를 이용해 뒤에 남은 아이들을 지워주는 문법이라는 것이다.
'코딩 공부 연습' 카테고리의 다른 글
백준 NM과 K(1) (0) | 2023.07.19 |
---|---|
백준 2309 일곱 난쟁이 (0) | 2023.07.16 |
백준 1920 수 찾기 (0) | 2023.06.22 |
백준 1057 토너먼트 (1) | 2023.06.20 |
백준 11000 강의실 배정 (1) | 2023.06.18 |