본문 바로가기
프로그래머스/C++

[level 1] 정수 내림차순으로 배치하기

by AsCE_hyunseung 2018. 8. 24.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
long long solution(long long n) {
    long long answer = 0;
    int count = 0;
    int var = 1;
    vector <int>num;
 
    while (n != 0)
    {
        num.push_back(n % 10);
        n = n / 10;
    }
    sort(num.begin(), num.end());
    for (int i = 0; i < num.size(); i++)
    {
        answer += num[i] * var;
        var*= 10;
    }
    return answer;
}
cs


문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.


제한 조건

n은 1이상 8000000000 이하인 자연수입니다.


문제를 처음 보자마자 든 생각은 형변환과 메소드로 간편하게 풀 수 있을거란 생각이 들었지만 알고리즘적으로 해결하고 싶었다.


첫번째 while문에서는 정수 n의 자릿수들을 벡터 num에 넣고 오름차순으로 정렬했다.

그 다음 for문에서는 1,10,100,1000... 이런 식으로 벡터 num에 곱해줌으로서 문제가 요구하는 조건을 맞추었다.