Study hard

(c++)프로그래머스 코딩테스트 연습 - 가장 큰 수 본문

프로그래머스/정렬

(c++)프로그래머스 코딩테스트 연습 - 가장 큰 수

Nimgnoej 2020. 10. 21. 22:54

programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

[풀이]

algorithm 라이브러리의 sort함수를 이용해 수를 정렬하였다.

두 수를 붙였을 때 더 큰 수가 되는 순서로 정렬하여 문자열로 바꿔주었다.

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

//붙여서 더 큰 수가 되는 순서로 정렬
bool sortNum(int &A, int &B) {
	string x = to_string(A) + to_string(B);
	string y = to_string(B) + to_string(A);
	return stoi(x) > stoi(y);
}

string getAns(vector<int> numbers) {
	string ans = "";
	for (int i = 0; i < numbers.size(); i++) {
		ans += to_string(numbers[i]);
	}
	return ans;
}

string solution(vector<int> numbers) {
	string answer = "";
	sort(numbers.begin(), numbers.end(), sortNum);
	answer = getAns(numbers);
	if (answer[0] == '0')
		answer = "0";
	return answer;
}