[Algorithms] Programmers / 특이한 정렬

Onam Kwon·2022년 12월 6일
0

Algorithms

목록 보기
23/24

특이한 정렬

링크

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;
}
profile
권오남 / Onam Kwon

0개의 댓글