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

YH·2023년 7월 21일
0

문제

특이한 정렬 : 문제 링크


문제 분석

  • 정수 n을 기준으로 n과 가까운 수부터 정렬하는데, 이때 n으로부터의 거리가 같다면 더 큰수를 앞에 오도록 배치한다. 정수가 담긴 배열 numlist와 정수n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return
  • 인접한 두 데이터를 비교하며, 조건을 만족하면 swap을 하는 버블정렬 개념을 활용. 첫 if문에서는 n에서 numlist값을 뺀값의 절대값을 비교하여 오름차순으로 정렬하도록 함. 두번째 if문에서는 절대값이 동일한데, 둘중 더 큰수가 뒤에 있을경우 두개의 자리를 swap.
  • 정렬을 마친 numlist를 return

풀이

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numlist, int n) {
    int temp;
    
    for(int i = 0; i < numlist.size() - 1; i++) {
        for(int j = i; j < numlist.size(); j++) {
            if(abs(n - numlist[i]) > abs(n - numlist[j])) {
                temp = numlist[i];
                numlist[i] = numlist[j];
                numlist[j] = temp;
            }
            if(abs(n - numlist[i]) == abs(n - numlist[j]) && numlist[i] < numlist[j]) {
                temp = numlist[j];
                numlist[j] = numlist[i];
                numlist[i] = temp;
            }
        }
    }
    return numlist;
}
profile
Keep Recycling Your Dreams

0개의 댓글