문제링크 백준 1431
문제를 풀기위해 시리얼번호의 길이와, 자리수의 합을 저장해야한다.
그러므로 serialNum 클래스를 만들어 문자열을 받으면 길이롸 자리수의 합을 갖고 있도록 하고,
sort 함수를 이용해 조건에 맞게 정렬했다.
[코드]
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
class serialNum {
public:
string num;
int sum = 0; //숫자 합
int size; // 문자열 길이
serialNum(string num) {
this->num = num;
this->size = num.size();
for (int i = 0; i < this->size; i++) {
if (isdigit(num.at(i))) {
this->sum += num.at(i) - '0';
}
}
}
};
bool compare(serialNum a, serialNum b) {
if (a.size==b.size) { //길이가 같을경우
if (a.sum == b.sum) { //자릿수 합이 같으면?
return a.num < b.num;
}
else
return a.sum < b.sum;
}
else
return a.size < b.size;
}
int main() {
int N;
cin >> N;
vector<serialNum> arr;
for (int i = 0; i < N; i++) {
string temp;
cin >> temp;
arr.push_back(serialNum(temp));
}
sort(arr.begin(), arr.end(), compare);
for (int i = 0; i < N; i++) {
cout << arr[i].num << '\n';
}
return 0;
}