문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
#include <string>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
string solution(vector<int> numbers) {
string answer = "";
// numbers_len은 배열 numbers의 길이입니다.
vector<string> v;
int siz=0;
for(auto e:numbers){
v.push_back(to_string(e));
}
sort(v.begin(),v.end(),[](string a, string b){
return a+b>b+a;
});
if(v[0]=="0") return "0";
for(string s:v) answer+=s;
return answer;
}
sort를 사용자 정의해야됨
sort(v.begin(), v.end(), [](string a, string b) { return a+b>b+a; });
이 형태 기억할 것.
아래는 헷갈리는 거 sort 세번째 인자에 대해 물어본 내용
return이 비교값인데 sort가 맞게 되는 건지?
응. sort의 세 번째 인자는 비교 함수야.
sort(v.begin(), v.end(), compare);
여기서 compare(a, b)가 true를 반환하면,
a를 b보다 앞에 둬라
라는 뜻이야.
그래서 이 함수는:
[](string a, string b) {
return a + b > b + a;
}
이 뜻이야.
a를 앞에 두는 게 더 큰 수를 만들면 true
아니면 false
예를 들어 a = "6", b = "10"이면:
a + b = "610"
b + a = "106"
"610" > "106"이니까 true.
즉:
"6"을 "10"보다 앞에 둬라
또 a = "10", b = "2"이면:
a + b = "102"
b + a = "210"
"102" > "210"은 false.
즉:
"10"을 "2"보다 앞에 두지 마라
그러면 "2"가 "10"보다 앞에 가게 돼.
'coding > 프로그래머스 알고리즘 고득점 kit : cpp' 카테고리의 다른 글
| [C++] 프로그래머스 'N으로 표현' 풀이 (0) | 2026.06.04 |
|---|---|
| [C++] 프로그래머스 'H-Index' 풀이 (0) | 2026.06.02 |
| [C++] 프로그래머스 '기능개발' 풀이 (0) | 2026.05.31 |
| [C++] 프로그래머스 '같은 숫자는 싫어' 풀이 (0) | 2026.05.30 |
| [C++] 프로그래머스 '폰켓몬' 풀이 (0) | 2026.05.29 |
