본문 바로가기

알고리즘 관련/Programmers

가장 큰 수 만들기

문제의 조건은 배열의 원소들로 만들 수 있는 가장 큰 수를 만들어야 한다.

쉽게 생각해보면, 가장 큰 수대로 정렬하여 만들 수 있어보이지만 함정이 숨어있다.

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