문제 출처

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. 소감