문자열을 sort하는 문제로, 전 문제와는 다르게 정렬형태를 주어 정렬 기준을 넣어줘야 하는 문제였다.
void sort(첫번째주소, 마지막주소, 정렬형태)
bool cmp(string n1, string n2) 함수로 두 숫자를 조합한 두가지 경우중에 큰 경우를 판단했다.
예를 들어 6, 10이 인자로 들어왔을 경우 두가지 조합 610, 106 중에 큰 것을 판단했다.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(string n1, string n2){
return n1+n2 > n2+n1;
}
string solution(vector<int> numbers) {
vector<string> tmp;
for(int i=0;i<numbers.size();i++){
tmp.push_back(to_string(numbers[i]));
}
sort(tmp.begin(), tmp.end(), cmp);
string answer = "";
// 주어진 정수가 모두 0인 경우 0 리턴 (000리턴x)
if(tmp[0] == "0")return "0";
for(int i=0;i<tmp.size();i++){
answer += tmp[i];
}
return answer;
}
int main(){
string answer = solution({6,10,2});
cout << answer;
return 0;
}
[0, 0, 0, 0]와 같이 0만 주어진 경우에 0을 리턴해야 하는데
0000을 리턴해주는 문제가 있었다.
if(tmp[0] == "0")return "0";
따라서 0만 포함되어 있는 경우 정렬해도 첫째자리 숫자가 0일테니까 첫째자리가 0일 때 "0"을 리턴해주었다.
프로그래머스에서 테스트 케이스를 추가하여 확인한 모습이다.