https://www.acmicpc.net/problem/1431
1431번: 시리얼 번호
첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
int s(const string & str){ // 자리수 합을 구하는 함수
int sum = 0;
for(int i = 0; i < str.size(); i++)
if(str[i] >= 48 && str[i] <= 57) // 해당 문자가 숫자인 경우, 더해줌
sum += str[i] - 48;
return sum;
}
bool cmp(const string& a, const string &b){
int len1 = a.size(), len2 = b.size();
if(len1 == len2){ // 길이가 같으면
int s1 = s(a), s2 = s(b);
if(s1 == s2) return a < b; // 자리수 합이 같은 경우, 사전순으로 정렬
else return s1 < s2; // 자리수 합이 같지 않으면, 자리수 합으로 정렬
}else return len1 < len2; // 길이로 정렬
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n; cin >> n;
string arr[50];
for(int i = 0; i < n; i++) cin >> arr[i];
sort(arr, arr + n, cmp);
for(int i = 0; i < n; i++) cout << arr[i] << "\n";
}
'Algorithm' 카테고리의 다른 글
| [백준 7795번] 먹을 것인가 먹힐 것인가 (C++) (0) | 2022.04.12 |
|---|---|
| [백준 5648번] 역원소 정렬 (C++) (0) | 2022.04.12 |
| [백준 11652번] 카드 (C++) (0) | 2022.04.12 |
| [백준 1541번] 잃어버린 괄호 (C++) (0) | 2022.04.07 |
| [백준 11660번] 구간 합 구하기 5 (C++) (0) | 2022.04.07 |