람다로 조건을 설정하여 정렬하면 짧은 코드로 쉽게 해결할 수 있다.
문제 상황에서는 인접한 숫자끼리 이어붙였을 때 더 큰 수가 되도록 정렬해야 한다.
sort(numbers.begin(), numbers.end(), [](int a, int b) {
string str_a = to_string(a);
string str_b = to_string(b);
return str_a + str_b > str_b + str_a;
});
여기서 리턴 값이 참이면 ab 순이 되고 거짓이면 ba 순이 된다.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
string solution(vector<int> numbers) {
sort(numbers.begin(), numbers.end(), [](int a, int b) {
string str_a = to_string(a);
string str_b = to_string(b);
return str_a + str_b > str_b + str_a;
//조건에 맞으면 앞에 둔다.
});
string answer = "";
for (auto& s : numbers)
{
answer += to_string(s);
}
if (answer[0] == '0')
return "0";
return answer;
}
int main()
{
cout << solution({ 6, 10, 2 }) << endl;
}
실행결과
6210