BOJ
[백준][c++] 1431번: 시리얼 번호
LEE MINGYU
2024. 10. 23. 19:03
https://www.acmicpc.net/problem/1431
문제 해석
- 문제에 제시된 조건으로 문자열들을 정렬한다
알고리즘 분류
- 정렬
풀이
- C++ STL인 sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp) 함수에 문제에 제시된 비교조건을 구현하여 인자로 사용한다
코드
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
bool cmp(const string &o1, const string &o2) {
if (o1.length() != o2.length()) {
return o1.length() < o2.length();
}
else {
int o1Sum = 0, o2Sum = 0;
for (char c : o1) {
if(isdigit(c)) o1Sum += c - '0';
}
for (char c : o2) {
if(isdigit(c)) o2Sum += c - '0';
}
if (o1Sum != o2Sum) return o1Sum < o2Sum;
else return o1 < o2;
}
}
int main() {
int n;
cin >> n;
vector<string> serials(n);
for (int i=0; i<n; i++) {
cin >> serials[i];
}
sort(serials.begin(), serials.end(), cmp);
// 정렬된 결과 출력
for (const string &serial : serials) {
cout << serial << endl;
}
return 0;
}