문제의 조건은 배열의 원소들로 만들 수 있는 가장 큰 수를 만들어야 한다.
쉽게 생각해보면, 가장 큰 수대로 정렬하여 만들 수 있어보이지만 함정이 숨어있다.
9, 13을 생각해보면 만들 수 있는 가장 큰 수는 913이다!
그래서 처음엔 정수의 맨 앞자리와 맨 뒷자리를 비교하여 커스텀 비교함수를 만들었다.
그런데, 예외케이스가 있었는데 232, 252와 같은 경우 중간 자리를 비교할 수 없다.
그래서 구글링해본 결과 문자열로 치환하여 비교하는 신박한 방법이 있었다.
정답코드
더보기
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
//커스텀 비교함수, 문자열 비교방식으로 치환한다.
bool cmp(string& a, string& b) {
return a + b > b + a;
}
string solution(vector<int> numbers) {
string answer = "";
vector<string> str;
for (const auto& item : numbers)
str.push_back(to_string(item));
sort(str.begin(), str.end(), cmp);
if (str[0] == "0")
return "0";
for (const auto& number : str)
answer += number;
return answer;
}
'알고리즘 관련 > Programmers' 카테고리의 다른 글
소수 만들기 (0) | 2021.02.16 |
---|---|
가장 큰 정사각형 (0) | 2021.02.10 |
구명보트 (0) | 2021.02.08 |
다리를 지나는 트럭 (0) | 2021.02.01 |
프린터 (0) | 2021.02.01 |