문제 출처
1. 문제설명
- 숫자
N
개가 주어질 때 그 수를 붙여서 만들 수 있는 가장 큰 수를 만들고자 한다.
N
개의 수를 한번씩 이용
2. 알고리즘 설계
- 두 숫자를 붙여본다.
- 붙였는데, 사전 순서상 앞에 있다면 작은 숫자이다!
3. 로직
- 문자열을 정렬한다.
- append 했을 때 사전 순서가 앞에 있는 순으로 정렬
- 문자열 a,b가 있을 때 a+b는 a의 뒤에 b를 이어붙이는 것
- 즉, a+b > b+a 가 정렬 조건이다!
4. 전체 코드
#include<bits/stdc++.h>
using namespace std;
bool cmp(const string& a, const string& b) { return a + b > b + a; };
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int n; cin >> n;
vector<string> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
sort(v.begin(), v.end(), cmp);
if (v[0] == "0") cout << "0";
else
for (string s : v)
cout << s;
return 0;
}
5. 소감