사용자 정의 함수를 통해 기준을 설정해주면 된다.
a가 b의 앞에 와야할 때 true, 그렇지 않을 때 false를 반환하는 사용자 정의 함수를 만들어서 sort 함수에 전달한다.
숫자만 덧셈에서 숫자를 판단하는 방법은
'0' <= s[i] && s[i] <= '9'이다.
s[i]-'0'을 하면 숫자로 덧셈을 진행할 수 있다.
//백준 1431, 시리얼 번호
#include <iostream>
#include <algorithm>
std::string serial[51];
//a가 b의 앞에 와야할 때 true, 그렇지 않을 때 false
bool userSort(std::string_view a, std::string_view b){
if(a.size() != b.size()) return a.size() < b.size();
else{
int sumA{0}; int sumB{0};
for(int i{0}; i<a.size(); ++i){
if('0' <= a[i] && a[i] <= '9') sumA += a[i] - '0';
}
for(int i{0}; i<b.size(); ++i){
if('0' <= b[i] && b[i] <= '9') sumB += b[i] - '0';
}
if(sumA != sumB) return sumA < sumB;
return a < b;
}
}
int main (){
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
std::cout.tie(NULL);
int N;
std::cin >> N;
for(int i{0}; i<N; ++i)
std::cin >> serial[i];
std::sort(serial, serial+N, userSort);
for(int i{0}; i<N; ++i)
std::cout << serial[i] << '\n';
return 0;
}
2025-01-27T03:59:30.883Z