문제 링크 : https://www.acmicpc.net/problem/1431
문제 풀이
sort 함수를 사용하고, 커스텀 비교 함수를 만들어 이를 활용함으로써 풀이를 진행하였다.
#include <iostream>
#include <algorithm>
using namespace std;
string arr[51];
int n;
string tmp;
bool cmp(string &s1, string &s2){ // 커스텀 비교 함수
if(s1.size() != s2.size()) return s1.size() < s2.size(); // 사이즈가 같지 않을 때 길이로 비교
int sum1 = 0;
int sum2 = 0;
for(int i = 0; i < s1.size(); i++){ // 각 시리얼에 존재하는 숫자들의 합을 계산
if(s1[i] >= 48 and s1[i] <= 57) sum1 += (s1[i] - '0');
}
for(int i = 0; i < s2.size(); i++){
if(s2[i] >= 48 and s2[i] <= 57) sum2 += (s2[i] - '0');
}
if(sum1 != sum2) return sum1 < sum2; // 길이가 같을 때 숫자의 합으로 비교
return s1 < s2; // 합도 같으면 사전순으로 비교
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 0; i < n; i++){
cin >> tmp;
arr[i] = tmp;
}
sort(arr, arr+n, cmp); // sort함수와 커스텀 비교 함수인 cmp 사용하여 정렬
for(int i = 0; i < n; i++){ // 출력
cout << arr[i] << "\n";
}
}
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(C++) 백준 15650번 - N과 M (2) (0) | 2023.04.09 |
---|---|
(C++) 백준 11652번 - 카드 (0) | 2023.04.09 |
(C++) 백준 15688번 - 수 정렬하기 5 (0) | 2023.04.08 |
(C++) 백준 11728번 - 배열 합치기 (0) | 2023.04.08 |
(C++) 백준 1182번 - 부분수열의 합 (0) | 2023.04.07 |