#12933 정수 내림차순으로 배치하기
문제 정리
자릿수를 큰 것부터 작은 것 순으로 정렬한 새로운 정수 리턴
생각해보기
자릿수 계산을 해서 min값을 찾을까..~~ 자릿수를 다 뽑아내서 vector나 string에 push_back 또는 append 한 후에
마지막으로 정수로 변환하기?
124를 10으로 나눴을 때 나머지는 4, 몫은 12
12를 10으로 나눴을 때 나머지는 2, 몫은 1
이런식으로 !! ㄷ ㄷ
코드 쓰기
long long - int 관계 (캐스팅)등에 주의해야 메모리 초과가 안 난다.
내 풀이
#include <string>
#include <vector>
#include <iostream>
using namespace std;
long long solution(long long n) {
long long answer = 0;
vector<int> v;
long long q = n;
int r = 0;
string s = "";
if(q < 10) { return q; }
while(q > 10){
r = (int)(q % 10);
q /= 10;
if (q > 10) {
v.push_back(r);
} else {
v.push_back(r);
v.push_back(q);
}
}
while(v.size() > 0){
int max = 0;
int idx = 0;
for(int k = 0; k<v.size(); k++){
if (v[k] > max){
max = v[k];
idx = k;
}
}
s.append(to_string(max));
v.erase(v.begin() + idx);
}
answer = stol(s);
return answer;
}
stoi가 아니고 stol 을 써줘야 aborted(core dumped) 오류가 안 남!
풀고 나서 알게된 것
만약에 sort 를 써도 된다면
string str = to_string(n);
sort(str.begin(), str.end(), greater<char>());
answer = stoll(str);