실버3 : 정렬 문제이다.

생각

문제에서 하라는 대로 비교만 하면 된다.

Code

// 실버3 : 백준 1431번 시리얼 번호
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int N = 0;
string arr[1002];
 
bool compare(string a, string b){
    int sizeA = int(a.size()), sizeB = int(b.size());
    if (sizeA > sizeB) return false;
    else if (sizeA < sizeB) return true;
    else {
        int sumA = 0, sumB = 0;
        for (int i = 0; i < sizeA; i++) {
            if (0 <= a[i]-'0' && a[i]-'0' <= 9) sumA += a[i]-'0';
        }
        for (int i = 0; i < sizeA; i++) {
            if (0 <= b[i]-'0' && b[i]-'0' <= 9) sumB += b[i]-'0';
        }
        if (sumA < sumB) return true;
        else if (sumA > sumB) return false;
        else {
            return a < b;
        }
    }
}
 
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
 
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> arr[i];
    }
 
    sort(&arr[0], &arr[N], compare);
 
    for (int i = 0; i < N; i++) {
        cout << arr[i] << '\n';
    }
 
    return 0;
 
}
 

Reference