가장 처음에 나오는 수가 클 수록 모든 수를 문자열로 이어 붙였을 때 가장 커진다.
예를 들어 9, 10, 3이 있으면, 9310이 가장 크다.
두 문자열을 비교해서 앞자리 수가 동일한 경우, 미리 합쳐서 사전순으로 비교한다.
예를 들어 3, 30을 비교할 때, 미리 두 경우를 합쳐서 330, 303을 만들어 볼 수 있고, 이 경우 최종적으로 330이 더 큰 수의 문자열로 나올 것이다.
만약 numbers에 0,0,0이 저장되어 있다면, 최종 결과는 000일 것이다.
(가장 큰 수 == 가장 앞에 나오는 수)가 0이라면 000을 정확한 숫자 형태의 0이라는 뜻으로 answer에 "0"을 저장한다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool compare(int A, int B) {
string A_str = to_string(A);
string B_str = to_string(B);
return A_str + B_str > B_str + A_str; // 큰 수가 앞에 오도록
}
string solution(vector<int> numbers) {
string answer = "";
//가장 앞에 숫자 기준으로 정렬
sort(numbers.begin(), numbers.end(), compare);
for(int temp : numbers){
cout << temp << "\n";
answer += to_string(temp);
}
if(answer[0] == '0'){
answer = "0";
}
return answer;
}