반응형
정렬 방식을 찾기에 쉬운 문제는 아니었다.
문자열을 그대로 내림차 순으로 정렬 한다면
예제 2에서는 30이 3보다 앞에 오게 된다. 303<330 이기 때문에 이는 적절하지 않다.
처음부터 정렬기준을, 두 문자열을 번갈아 대보면서 최대값을 가지는 경우의 앞 문자열을 앞쪽에 배치 시키는식으로 잡으면 된다.
compare 함수에서 return을 b+a<a+b 로 해주고,
정렬된 문자열들을 앞에서부터 차례대로 이어 붙이면 정답이다.
이 외에 한 케이스를 더 처리해줘야 하는데, 모든 입력값이 0일 경우에는 그냥 0을 반환하는 처리까지 해주어야 한다.
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
bool compare(string a,string b) {return b+a<a+b;}
string solution(vector<int> numbers) {
vector<string> v;
string answer = "";
for(int i=0;i<numbers.size();i++) v.push_back(to_string(numbers[i]));
sort(v.begin(),v.end(),compare);
if(v[0]=="0") return "0";
for(int i=0;i<v.size();i++) answer += v[i];
return answer;
}
반응형
'Algorithm > Sort' 카테고리의 다른 글
Sort 고득점 kit 풀이 완료, 후기 (0) | 2020.09.11 |
---|---|
[정렬, 난이도 하] 프로그래머즈, H-Index (0) | 2020.09.10 |
[정렬, 난이도 하] 프로그래머즈, K번째수 (벡터 복사) (0) | 2020.09.10 |
댓글