https://school.programmers.co.kr/learn/courses/30/lessons/120880
pair
를 이용하면 쉽게 풀 수 있다.- 페어 벡터를 생성 후 페어의 첫번째에는 각 원소와 매개변수 n의 차의 절댓값을 넣고 두번째에는 원래 값을 넣어준다.
- 그 후 페어 벡터를 정렬하는데, 입력받은 매개변수 n과의 차이가 적을수록 우선순위가 높다. 즉, 절댓값이 작을수록 우선순위가 높다. -> 오름차순.
- 페어의 첫번째 값이 같다면 페어의 두번째 값인 원래 값이 큰 경우 우선순위가 높다. -> 내림차순.
- 이 두가지의 정렬을 동시에 하는법은 아래와 같다.
- 정렬을 다 마쳤다면 순서대로
answer
벡터에 넣어준다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int comparison(const pair<int,int> &a, const pair<int,int> &b) {
return a.first < b.first || (a.first == b.first && a.second > b.second);
}
vector<int> solution(vector<int> numlist, int n) {
vector<int> answer;
vector<pair<int, int>> v;
for(int i=0;i<numlist.size();i++) {
v.push_back(make_pair(abs(numlist[i]-n), numlist[i]));
}
sort(v.begin(), v.end(), comparison);
for(const auto &item: v) answer.push_back(item.second);
return answer;
}