본문 바로가기

알고리즘/Programmers

Programmers / Sort / 가장 큰 수

< 문제링크 >

https://www.welcomekakao.com/learn/courses/30/lessons/42746

< 풀이 >

1. 숫자를 이어붙이는 문제이므로 문자열 형태로 만들어서 연산하는 것이 편하다.

2. 문자열 배열을 정렬하는데, 그 기준은 두 문자열을 이어붙였을 때 더 큰 문자열이 되도록 설정한다.

3. 정렬된 문자열을 순서대로 이어붙여 정답을 만든다.

-> 이 때, 제일 처음 문자열이 0인 경우 제일 큰 수가 0이라는 뜻이므로 예외처리를 해주어야 한다.

< 코드 >

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

bool cmp(string a, string b)
{
    return a + b > b + a;
}

string solution(vector<int> numbers) {
    string answer = "";
    vector<string> str_numbers;
    // 숫자들을 문자열 형태로 변환해서 저장
    for (auto iter = numbers.begin(); iter != numbers.end(); iter++) {
        str_numbers.push_back(to_string(*iter));
    }
    // 숫자들을 내림차순으로 정렬 - 문자열 형태이므로 
    sort(str_numbers.begin(), str_numbers.end(), cmp);
    // 배열에서 제일 첫번째 수가 0이면 답은 0
    if (str_numbers.front() == "0") return "0";
	
    for (auto iter = str_numbers.begin(); iter != str_numbers.end(); iter++) {
        answer.append(*iter);
    }
    return answer;
}