[프로그래머스 / C++] 정수 내림차순으로 배치하기

YH·2023년 12월 12일
0

문제

정수 내림차순으로 배치하기 : 문제 링크


문제 분석

  • 함수 solution은 정수 n을 매개변수로 입력받는다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 return. 예를들어 n이 118327이면 873211을 return
  • 제한 조건
    • n은 1이상 8,000,000,000이하인 자연수이다.
  • 배열의 내림차순 정렬을 위해 sort() 함수를 사용할 것 이므로 algorithm 헤더를 포함
  • 새롭게 정렬한 정수값을 저장할 long long형 변수 answer을 0으로, n의 각 자리수를 저장할 정수형 벡터 temp를 초기화. while loop의 조건문을 n으로 설정하여 n이 자연수인 동안 반복. n을 10으로 나눈 나머지를 temp에 저장하고, n을 10으로 나눈 몫을 n에 저장. loop 탈출 후, sort() 함수를 사용하여 comp 인자를 greater()로 설정하여 내림차순으로 정렬. 이후 for loop를 통해 내림차순 정렬된 벡터의 처음부터 마지막 원소까지 순환하면서, answer에 10을 곱해 저장, temp[i]값을 더하여 저장을 반복. loop 탈출 후, 최종적으로 저장된 answer을 return

algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬

  • sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
  • sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
  • sort(v.begin(), v.end(), less<자료형>()); // 오름차순

풀이

#include <vector>
#include <algorithm>

using namespace std;

long long solution(long long n) {
    long long answer = 0;
    vector<int> temp;
    
    while(n) {
        temp.push_back(n % 10);
        n /= 10;
    }
    sort(temp.begin(), temp.end(), greater<int>());
    for(int i = 0; i < temp.size(); ++i) {
        answer *= 10;
        answer += temp[i];
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글