sort 함수 연습용 문제. sort의 세 번째 인자에 bool형 함수를 넣으면 이 함수의 내용대로 sort 해준다.

#include <bits/stdc++.h>
using namespace std;
int N;
vector<string> A;
string x;

int f(string a) {
    int ret = 0;
    for(int i = 0; i < a.length(); i++) 
        if('0' <= a[i] && a[i] <= '9') ret += (a[i] - '0');
    return ret;
}
bool cmp(const string &a, const string &b) {
    int p, q;
    if(a.length() != b.length()) {
        return a.length() < b.length();
    } else if(a.length() == b.length()) {
        p = f(a);
        q = f(b); 
    }
    if(p != q) return p < q;
    return a < b;
}
int main() {
    cin >> N;
    for(int i = 0; i < N; i++) {
        cin >> x;
        A.push_back(x);
    }
    sort(A.begin(), A.end(), cmp);
    for(int i = 0; i < N; i++) {
        cout << A[i] << '\n';
    }
}

cmp 함수만 보면 된다

1. 두 문자열의 길이가 같으면 더 긴걸 뒤로 보내야 하므로 a.length() < b.length()

2. 같으면 이 문자열중 숫자들만 더해서 더 큰걸 뒤로 보냄

3. 위에 두 개로 비교를 못하면 사전순 비교. (a<b) 여기서 비교를 못 한다는건 숫자가 없다는거니까 그냥 p,q 가 둘 다 0이니까 같은걸로 비교하면 됨

'PS > baekjoon' 카테고리의 다른 글

[BOJ 1463] 1로 만들기 2  (0) 2023.07.18
[BOJ 11055] 가장 큰 증가하는 부분 수열  (1) 2023.07.17
[BOJ 2295] 세 수의 합  (1) 2023.07.03
[BOJ 10816] 숫자 카드 2  (2) 2023.07.03
[BOJ 1920] 수 찾기  (0) 2023.07.03

+ Recent posts