[프로그래머스/C++]Lv.0 - 특이한 정렬

YH J·2023년 4월 18일
0

프로그래머스

목록 보기
30/168

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/120880

내 풀이

일단 모든 원소에서 n을 뺀다. 모든 원소 하나하나 비교해가면서 값을 비교해서 스왑해주고 다 정렬되면 다시 n을 더해준다.

내 코드

#include <string>
#include <vector>
#include <cmath>
using namespace std;

vector<int> solution(vector<int> numlist, int n) {
    vector<int> answer;
    vector<int> a;
    
    for(int i = 0; i < numlist.size(); i++)
    {
        numlist[i] -= n;
    }
    for(int i = 0; i < numlist.size() - 1; i++)
    {
        for(int j = i + 1; j < numlist.size(); j++)
        {
            if(abs(numlist[i]) > abs(numlist[j]))
                swap(numlist[i],numlist[j]);
            else if (abs(numlist[i]) == abs(numlist[j]))
            {
                if(numlist[i] < numlist[j])
                    swap(numlist[i],numlist[j]);
            }
        }
    }
    for(int i = 0; i < numlist.size(); i++)
    {
        numlist[i] += n;
    }
    answer = numlist;
    
    return answer;
}

다른 사람의 풀이

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

int num;

bool compare(int prev, int next) {
    if (abs(prev - num) == abs(next - num)) 
        return prev > next;
    return abs(prev - num) < abs(next - num);
}

vector<int> solution(vector<int> numlist, int n) {
    num = n;
    sort(numlist.begin(), numlist.end(), compare);
    return numlist;
}

다른 사람의 풀이 해석

sort함수에서 원하는 결과를 위해 커스텀 함수를 넣을수 있다는걸 몰랐었다. 자주 쓰일 기능인것 같다.

profile
게임 개발자 지망생

0개의 댓글