GitHubSeob

C++ / 프로그래머스 / 가장 큰 수 본문

Programmers/Level 2

C++ / 프로그래머스 / 가장 큰 수

GitHubSeob 2021. 11. 12.
문제

https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

문제풀이

 

https://www.acmicpc.net/problem/16496

백준에 있는 문제와 똑같다.

int형으로 들어온 숫자들을 새 벡터에 string형으로 변환하여 push 해준다.

 

그다음 sort를 compare함수 대로 정렬한다.

compare함수는 string a와 string b를 인자로 받고, a+b, b+a, 둘 중 더 큰 수를 return 한다.

정렬이 끝나면 string answer에 덧붙인다.

만약 answer[0]이 0이라면 0을 return 하면 되고 그 외의 경우는 answer 그대로 return 하면 된다.

 

 

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

bool cmp(string num1, string num2) {
    return num1 + num2 > num2 + num1;
}

string solution(vector<int> numbers) {
    string answer("");
    vector<string>nums(numbers.size(), " ");

    for (int idx = 0; idx < nums.size(); ++idx)
        nums[idx] = to_string(numbers[idx]);

    sort(nums.begin(), nums.end(), cmp);

    for (int idx = 0; idx < nums.size(); ++idx)
        answer += nums[idx];

    if (answer[0] == '0') return "0";
    return answer;
}