Programmers/Level 2
C++ / 프로그래머스 / 가장 큰 수
GitHubSeob
2021. 11. 12. 23:49
| 문제 |
https://programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr

| 문제풀이 |
https://www.acmicpc.net/problem/16496
백준에 있는 문제와 똑같다.
int형으로 들어온 숫자들을 새 벡터에 string형으로 변환하여 push 해준다.
그다음 sort를 compare함수 대로 정렬한다.
compare함수는 string a와 string b를 인자로 받고, a+b, b+a, 둘 중 더 큰 수를 return 한다.
정렬이 끝나면 string answer에 덧붙인다.
만약 answer[0]이 0이라면 0을 return 하면 되고 그 외의 경우는 answer 그대로 return 하면 된다.
| 코드 |
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(string num1, string num2) {
return num1 + num2 > num2 + num1;
}
string solution(vector<int> numbers) {
string answer("");
vector<string>nums(numbers.size(), " ");
for (int idx = 0; idx < nums.size(); ++idx)
nums[idx] = to_string(numbers[idx]);
sort(nums.begin(), nums.end(), cmp);
for (int idx = 0; idx < nums.size(); ++idx)
answer += nums[idx];
if (answer[0] == '0') return "0";
return answer;
}