가장 큰 수

magicdrill·2025년 5월 16일
0
post-thumbnail

가장 큰 수

가장 큰 수를 만드는 법?

가장 처음에 나오는 수가 클 수록 모든 수를 문자열로 이어 붙였을 때 가장 커진다.
예를 들어 9, 10, 3이 있으면, 9310이 가장 크다.

A_str + B_str > B_str + A_str 식은 왜?

두 문자열을 비교해서 앞자리 수가 동일한 경우, 미리 합쳐서 사전순으로 비교한다.
예를 들어 3, 30을 비교할 때, 미리 두 경우를 합쳐서 330, 303을 만들어 볼 수 있고, 이 경우 최종적으로 330이 더 큰 수의 문자열로 나올 것이다.

[0, 0, 0]?

만약 numbers에 0,0,0이 저장되어 있다면, 최종 결과는 000일 것이다.
(가장 큰 수 == 가장 앞에 나오는 수)가 0이라면 000을 정확한 숫자 형태의 0이라는 뜻으로 answer에 "0"을 저장한다.

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

bool compare(int A, int B) {
    string A_str = to_string(A);
    string B_str = to_string(B);
    
    return A_str + B_str > B_str + A_str; // 큰 수가 앞에 오도록
}

string solution(vector<int> numbers) {
    string answer = "";
    
    //가장 앞에 숫자 기준으로 정렬
    sort(numbers.begin(), numbers.end(), compare);
    
    for(int temp : numbers){
        cout << temp << "\n";
        answer += to_string(temp);
    }
    if(answer[0] == '0'){
        answer = "0";
    }
    
    return answer;
}

0개의 댓글