[C++] BOJ 1431번 : 시리얼 번호
2022. 1. 13. 22:12ㆍProgramming Language/.Cpp
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
/* 문제 조건
1. 길이 다름: 시리얼번호가 짧은 것
2. 길이 같: 모든 자리수 합이 작은 것 (숫자)
3. 둘다 같: 사전순 . 숫자 < 알파벳
* 설계
1. 스트링 길이 출력 // v[i].length? strlen(v[i])?
2. sum[a] vs sum[b].. 비교, str[i] >= '0' && str[i]= '9' 일때, sum += str[i]-'0';
*/
int sumOfSerial(const string& a)
{
int sum = 0;
for (int i = 0; i < a.size(); i++)
{
if (a[i] >= '0' && a[i] <= '9') sum += a[i] - '0'; //char - 48 = int(c); == char - '0';
}
return sum;
}
bool compareSerial(const string& a, const string& b) {
if (a.size() == b.size()) {
if (sumOfSerial(a) == sumOfSerial(b)) return a < b; // 시리얼의 숫자 합이 같은 경우 사전 순 비교
return sumOfSerial(a) < sumOfSerial(b); // 길이가 같을 때 숫자 합이 작은 것이 true
}
else return a.size() < b.size(); // 길이가 다른 경우 짧은 것이 true
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
vector<string> v(n);
for (int i = 0; i < n; i++)
{
cin >> v[i];
}
sort(v.begin(), v.end(), compareSerial);
for (int i = 0; i < n; i++)
{
cout << v[i] << '\n';
}
}
'Programming Language > .Cpp' 카테고리의 다른 글
[C++]BOJ 10809번 : 알파벳 찾기 (0) | 2022.01.18 |
---|---|
[C++] BOJ 18870번 : 좌표 압축 (0) | 2022.01.14 |
[C++] BOJ 15889번 : 호 안에 수류탄이야!! (0) | 2022.01.13 |
[C++] BOJ 11582번 : 치킨 TOP N (0) | 2022.01.13 |
[C++ STL과 알고리즘] 벡터의 merge sort 공부하기 (0) | 2022.01.13 |