콘솔창 & 윈도우창/코딩 테스트
프로그래머스 LV.2 가장 큰 수
뽀또치즈맛
2024. 11. 19. 08:56
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
처음에 짠 코드는 next_permutation을 이용해서 구현하였다.
next_permutation은 모든 경우의 수를 출력해 주기 때문에,
가장 큰 경우의 수만 계속해서 담으면 될 거라 생각했기 때문이다.
string solution(vector<int> numbers) {
string answer = "";
sort(numbers.begin(), numbers.end());
string n = "";
do {
n = "";
for (int i = 0; i < numbers.size(); i++) {
n += to_string(numbers[i]);
}
if (answer < n)
answer = n;
} while (next_permutation(numbers.begin(),numbers.end()));
return answer;
}

해당 코드르는 결정적으로 시간초과가 너무 많이 나왔다.
어떻게 하면 비교를 쉽게 할 수 있을까?
고민하며 기수정렬을 사용하려 했지만,
더 간단한 방법으로 비교하였다.
bool cmp(string& a, string& b) {
return a + b > b + a;
}
string solution(vector<int> numbers) {
vector<string> str;
string maxN = "";
string answer = "";
for (int i = 0; i < numbers.size(); i++) {
str.push_back(to_string(numbers[i]));
}
sort(str.begin(), str.end(), cmp);
if (str[0] == "0") return "0";
for (int i = 0; i < str.size(); i++) {
answer += str[i];
}
return answer;
}
