문제 설명
제한 사항 및 입출력 예제
개념
주어진 정수 벡터에서 모든 숫자의 조합 중 가장 큰 수를 찾는 문제다. 다음과 같은 조건을 고려해 보자.
- 숫자의 순서: 수를 이루는 각 숫자들의 배치 순서를 문자열로 바꾸어 정렬
- 숫자의 자릿수: 두 숫자가 주어졌을 때, 자릿수가 다르다면 두 숫자의 문자열로 바꾼 후 이어 붙였을 때 큰 방향을 확인
따라서 정렬 기준을 두 문자열을 더했을 때 큰 쪽을 리턴하게 새롭게 정의하면 된다.
풀이
#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;
}
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 영어 끝말잇기 with C++ (0) | 2023.06.06 |
---|---|
[프로그래머스] 짝지어 제거하기 with C++ (0) | 2023.06.05 |
[프로그래머스] 피보나치 수 with C++ (0) | 2023.06.03 |
[프로그래머스] 다음 큰 숫자 with C++ (0) | 2023.06.02 |
[프로그래머스] 숫자의 표현 with C++ (0) | 2023.06.01 |