< 문제링크 >
https://www.welcomekakao.com/learn/courses/30/lessons/42746
< 풀이 >
1. 숫자를 이어붙이는 문제이므로 문자열 형태로 만들어서 연산하는 것이 편하다.
2. 문자열 배열을 정렬하는데, 그 기준은 두 문자열을 이어붙였을 때 더 큰 문자열이 되도록 설정한다.
3. 정렬된 문자열을 순서대로 이어붙여 정답을 만든다.
-> 이 때, 제일 처음 문자열이 0인 경우 제일 큰 수가 0이라는 뜻이므로 예외처리를 해주어야 한다.
< 코드 >
#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> str_numbers;
// 숫자들을 문자열 형태로 변환해서 저장
for (auto iter = numbers.begin(); iter != numbers.end(); iter++) {
str_numbers.push_back(to_string(*iter));
}
// 숫자들을 내림차순으로 정렬 - 문자열 형태이므로
sort(str_numbers.begin(), str_numbers.end(), cmp);
// 배열에서 제일 첫번째 수가 0이면 답은 0
if (str_numbers.front() == "0") return "0";
for (auto iter = str_numbers.begin(); iter != str_numbers.end(); iter++) {
answer.append(*iter);
}
return answer;
}
'알고리즘 > Programmers' 카테고리의 다른 글
Programmers / 완전탐색 / 모의고사 (0) | 2020.09.08 |
---|---|
Programmers / Sort / H-index (0) | 2020.09.07 |
Programmers / Sort / K번째수 (0) | 2020.09.06 |
Programmers / Stack, Queue / 프린터 (0) | 2020.09.06 |
Programmers / Stack, Queue / 다리를 지나는 트럭 (0) | 2020.09.06 |