프로그래머스/2레벨

가장 큰 수/C++

Koalitsiya 2023. 1. 17. 15:05
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

numbers에 들어있는 문자열을 이어 붙여 만들 수 있는 가장 큰 수를 구해야한다.

문자열 a와 b가 있다고 할 때 a + b > b + a를 리턴하는 cmp() 함수를 만들어 sort()의 세 번째 인자 값으로 넣어 정렬한 문자열 배열을 index = 0부터 이어 붙이면 가장 큰 수가 된다.

 

예시)

string a = "10" string b = "6"
return "10" + "6" > "6" + "10"

 

1. numbers의 원소들을 문자열로 변환하여 문자열 벡터 nums에 담는다.

2. 문자열 a와 b를 받아 a + b > b + a를 리턴하는 함수 cmp()를 작성한다.

3. 위 함수를 가지고 nums를 정렬한다.

4-1. nums[0]이 "0"이면 벡터에서 가장 큰 문자열이 0인 것이므로 "0"을 리턴

4-2. answer에 nums의 원소들을 더한 후 answer 리턴

#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> nums;
    
    for(int i = 0; i < numbers.size(); i++)
        nums.push_back(to_string(numbers[i]));
    
    sort(nums.begin(), nums.end(), cmp);
    
    if(nums[0] == "0") return "0";
    for(int i = 0; i < nums.size(); i++)
        answer += nums[i];
    
    return answer;
}