[프로그래머스/C++] 가장 큰 수
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <iostream>
using namespace std;
bool compare(const string &a, const string &b) {
return a + b > b + a;
}
string solution(vector<int> numbers) {
vector<string> arr;
string answer;
for(int it : numbers)
arr.push_back(to_string(it));
sort(arr.begin(), arr.end(), compare);
for(string sit : arr)
answer += sit;
return answer.substr(0,2) == "00" ? "0" : answer;
}
주어진 숫자를 sorting해서 가장 큰 숫자를 만드는 문제이다.
단순히 앞자리가 큰 숫자가 맨 앞으로 오도록 sorting하면 되겠다고 생각해서 compare함수를 구현했다.
처음에는 문자열 2개를 비교하며 만약 string a가 string b보다 짧다면 string a의 끝나는 숫자가 b의 남은 숫자보다 큰지를 비교하며 나아가려고 했다(ex: 3, 32이면 332가 323보다 크므로 3과 2를 비교하고 리턴하는 것이다.)
그런데 생각해보니 결국 더한 값이 뭐가 더 큰지를 비교하는 것이라는 것을 알고 코드를 밀어버리고 두 문자열을 붙인 순서가 더 큰 값을 true로 가져오도록 compare함수를 수정했다.
그리고 있어보이려고(leetcode에서는 생성자가 속도가 더 빨라서 프로그래머스도 그럴까? 싶어서 적용해보았다) for iterator를 사용하였다.
그 후 testcase 11번이 자꾸 틀려서 곰곰히 생각해보니 00일 때 0이 아닌 00을 return해서 문제가 생기는 것 같아 수정하였더니 모든 테스트 케이스도 통과하였다.
문제: https://programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr