문제링크 :https://www.acmicpc.net/problem/1431
문제설명
문자열이 주어졌을경우 조건에 맞춰서 정렬 하는문제.
알고리즘
1. sort 함수에서 비교 함수를 정의하여 정렬한다
- 길이가 짧은 것이 앞으로
- 길이가 같다면 문자열에 있는 숫자를 더해서 작은게 앞으로
- 더한 값도 같다면 사전순으로 정렬
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int getSum(string a) { int n = a.length(), sum = 0; for (int i = 0; i < n; i++) { if (a[i] - '0' <= 9 && a[i] - '0' >= 0) { sum += a[i] - '0'; } } return sum; } bool compare(string str1, string str2) { //길이가 짧은것이 우선 if (str1.length() != str2.length()) { return str1.length() < str2.length(); } //길이가 같을때 else { if (getSum(str1) != getSum(str2)) { return getSum(str1) < getSum(str2); } else return str1 < str2; } } vector<string> v; int main() { int n; cin >> n; string str; for (int i = 0; i < n; i++) { cin >> str; v.push_back(str); } sort(v.begin(), v.end(),compare); for (int i = 0; i < n; i++)cout << v[i]<<"\n"; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 10282번 : 해킹 (0) | 2020.05.22 |
---|---|
백준 10159번 : 저울 (0) | 2020.05.22 |
백준 4936번: 섬의 개수 (0) | 2020.05.22 |
백준 6603번: 로또 (0) | 2020.05.22 |
백준 1181번: 단어 정렬 (0) | 2020.05.22 |