반응형
https://www.acmicpc.net/problem/16496
문제 해결 알고리즘
그리디하게 a + b와 b + a 중에 큰 것으로 정렬을 해준다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
bool cmp(string a, string b){
if(a == b) return false;
string ab = a+b;
string ba = b+a;
if(ab > ba) return true;
else return false;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N; cin >> N;
vector<string> v(N);
int flag = 0;
for(int i=0;i<N;i++){
cin >> v[i];
if(v[i] != "0") flag = 1;
}
if(flag == 0) cout << 0;
else {
sort(v.begin(), v.end(), cmp);
for(int i=0;i<N;i++){
cout << v[i];
}
}
}
메모
strict weak ordering에 맞게 cmp함수를 구성해주어야한다. 런타임 에러 나온다..
cmp 함수 구성할 때에 어설프게 비교하게 설계하지 말자..
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[백 트래킹] BOJ 1038 감소하는 수 (0) | 2022.01.18 |
---|---|
[분할 정복] BOJ 17829 222-풀링 (0) | 2022.01.15 |
[BFS] BOJ 17267 상남자 (0) | 2022.01.08 |
[BFS] BOJ 5427 불, BOJ 4179 불! (0) | 2022.01.05 |
[DP] BOJ 10942 팰린드롬? (0) | 2022.01.02 |