본문 바로가기
  • 실행력이 모든걸 결정한다
Algorithm/Sort

[정렬, 난이도 중] 프로그래머즈, 가장 큰 수

by 김코더 김주역 2020. 9. 10.
반응형

정렬 방식을 찾기에 쉬운 문제는 아니었다.

문자열을 그대로 내림차 순으로 정렬 한다면

예제 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;
}
반응형

댓글