Algorithm/프로그래머스

[프로그래머스] 가장 큰 수 with C++

nowkoes 2023. 6. 4. 00:00

문제 설명


제한 사항 및 입출력 예제


개념

 주어진 정수 벡터에서 모든 숫자의 조합 중 가장 큰 수를 찾는 문제다. 다음과 같은 조건을 고려해 보자.

  1. 숫자의 순서: 수를 이루는 각 숫자들의 배치 순서를 문자열로 바꾸어 정렬
  2. 숫자의 자릿수: 두 숫자가 주어졌을 때, 자릿수가 다르다면 두 숫자의 문자열로 바꾼 후 이어 붙였을 때 큰 방향을 확인

 

 따라서 정렬 기준을 두 문자열을 더했을 때 큰 쪽을 리턴하게 새롭게 정의하면 된다.


풀이

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

string solution(vector<int> numbers) 
{
    string answer = "";
    vector<string> v;

 정답을 저장할 문자열 answer와 벡터 v를 초기화한다.

 

    for (const auto& val : numbers)
        v.push_back(to_string(val));

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

 벡터에 정수들을 삽입하고 cmp라는 기준으로 벡터를 정렬한다.

 

bool cmp(const string& a, const string& b)
{
    if (b + a < a + b)
        return true;

    return false;
}

 이때 정렬 기준은 문자열 두 개가 들어왔을 때, 둘 중 큰 값을 리턴하게 하였다.

 

    for (auto it = v.begin(); it < v.end(); ++it)
        answer += *it;

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

    return answer;
}

 정렬된 결과를 answer에 더해주고, 만약 첫 문자가 0이라면 모든 숫자가 0이었떤 것이므로, answer를 0으로 설정한다.

 

총합본

더보기
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(const string& a, const string& b)
{
    if (b + a < a + b)
        return true;

    return false;
}

string solution(vector<int> numbers) 
{
    string answer = "";
    vector<string> v;

    for (const auto& val : numbers)
        v.push_back(to_string(val));

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

    for (auto it = v.begin(); it < v.end(); ++it)
        answer += *it;

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

    return answer;
}
반응형