내 풀이 + ChatGPT 풀이
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(long long n) {
vector<int> answer;
// 벡터 answer에 역순으로 저장. 역순이 아니어도 됨.
while (n) {
int element = n % 10;
answer.push_back(element);
n = n / 10;
}
// vector + 내림차순
sort(answer.rbegin(), answer.rend());
// vector 뽑아내기
int result = 0;
for (int i = 0; i < answer.size(); i++) {
result = result * 10 + answer[i];
}
return result;
}
위의 풀이 중 다음의 코드만 GPT의 도움을 받았다.
// vector 뽑아내기
int result = 0;
for (int i = 0; i < answer.size(); i++) {
result = result * 10 + answer[i];
}
- 기존 내 생각: pop_back으로 string 변환 후 stoi()로 바꿀 생각을 했었는데, 이렇게 풀이하는 방식이 훨씬 깔끔하고 이해하기 편한 것 같다.
아 물론, sort 함수를 사용한 코드는 구글링으로 해결했다. 내림차순을 나타내는 방법이 세가지 있음을 알게 되었다.
sort(answer.rbegin(), answer.rend()); // 1.
reverse(answer.begin(), answer.end()); // 2.
sort(answer.begin(), answer.end(), compare); // 3. comp 함수 구현 필요
bool compare(int a, int b) {
return a > b;
}
함수의 이름은 당연히 compare가 아닌 어떤 것이라도 상관없으며, 주의해야 할 점은 인자로는 compare()가 아닌 compare를 넣어줘야 한다는 것이다.
sort 함수에서 세 번째 인자로 들어간 함수를 인식하여, 자동으로 앞에 수를 i, 뒤에 수를 j에 넣어주게 되는데, i > j가 참이면 1, 거짓이면 0을 반환하는 함수이므로, i가 j보다 클 경우 sort를 실시하게 되어 내림차순으로 정렬된다.