nums라는 숫자 목록이 있다고 가정하고 가능한 가장 큰 숫자가 되도록 순서를 재정렬하고 이를 문자열로 반환해야 합니다.
따라서 입력이 nums =[20, 8, 85, 316]과 같으면 출력은 "88531620"이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 배열 온도 정의
- 숫자 단위의 각 항목 i에 대해:
- i를 temp에 문자열로 삽입
- 사전 순서에 따라 배열 temp를 정렬합니다(연결 b가 b 연결 a보다 큰 경우 두 문자열 a, b 확인)
- temp:
- 의 각 문자열에 대해
- res :=res 연결 s
- 반환 결과
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h>
using namespace std;
static bool cmp(string a, string b) {
return (a + b) >= (b + a);
}
string solve(vector<int>& nums) {
vector<string> temp;
for (int i : nums) {
temp.push_back(to_string(i));
}
sort(temp.begin(), temp.end(), cmp);
string res;
for (string s : temp) {
res += s;
}
return res;
}
int main(){
vector<int> v = {20, 8, 85, 316};
cout << solve(v);
} 입력
{20, 8, 85, 316} 출력
88531620