프로그래머스/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;
}