콘솔창 & 윈도우창/코딩 테스트

프로그래머스 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;
}