알고리즘 문제 해결/BOJ

[그리디] BOJ 16496 큰 수 만들기

jmkimmessi 2022. 1. 12. 00:00
반응형

https://www.acmicpc.net/problem/16496

 

16496번: 큰 수 만들기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 리스트에 포함된 수가 주어진다. 수는 공백으로 구분되어져 있고, 1,000,000,000보다 작거나 같은 음이 아닌 정수 이다. 0을 제외한 나

www.acmicpc.net

 

문제 해결 알고리즘 

 

그리디하게 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