어떤 정수 $n$을 받으면 그 정수를 구성하는 숫자들을 내림차순으로 재배열하는 문제.
난 이전에 했던 자연수 배열을 만들 때 썻던 풀이를 써먹기로 했다.
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
long long solution(long long n) {
vector<int> v;
string concatStr;
while (n > 0) {
v.push_back(n % 10);
n /= 10;
}
sort(v.rbegin(), v.rend());
for (int num : v) {
concatStr += to_string(num);
}
return stoll(concatStr);
}
모듈러를 반복해 각 수를 뽑아 벡터에 넣었다.
내림차순 정렬이기 때문에 역순으로 정렬하고,
스트링에 하나씩 붙여 나갔다.
그리고 ``stoll()''을 통해 ``long long''으로 변환하고 마무리.
결과는 나왔지만 "더 간결하게 할 수 없을까?"라는 의문은 여전히 있었다.
아무리 생각해도 떠오르지 않아서 다른 사람들은 어떻게 했는지 보기로 했다.
long long solution(long long n) {
long long answer = 0;
string str = to_string(n);
sort(str.begin(), str.end(), greater<char>());
answer = stoll(str);
return answer;
}
한 대 얻어맞은 느낌.
왜 문자열을 정렬할 생각을 못했을까?
숫자라는 것에만 집중해 문자열을 어떻게 해보겠단 발상 자체를 못했다.
좋은 자극이 됐다.
'Camp > T.I.L.' 카테고리의 다른 글
[TIL #16] 없는 숫자 더하기 (0) | 2024.07.10 |
---|---|
[TIL #15] 콜라츠 추측 (0) | 2024.07.09 |
[TIL #13] 정수 제곱근 판별 (0) | 2024.07.03 |
[TIL #12] 무조건적 서브쿼리를 지양하고 싶다 (0) | 2024.07.02 |
[TIL #11] 나머지가 1이 되는 수 찾기 (0) | 2024.07.01 |