한다 공부
[C++] 백준 알고리즘 1431번 시리얼 번호 본문
이 문제는
sort STL을 이용해서 풀었다
알고리즘을 include하고
sort(시작, 끝, 정렬방식(선택));
하면 된다.
정렬방식의 경우 기본 값은 오름차순이라 한다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
//각 자리 숫자 합 함수
//아스키 코드 이용해서 문자열 중 숫자만 추출
int sum(string s) {
int i, sum = 0;
for (i = 0; i < s.length(); i++) {
if (s[i] >= 48 && s[i] <= 57) {
sum = sum + s[i] - 48;
}
}
return sum;
}
//비교 함수
bool cmp(const string & a, const string & b) {
//조건 1
if (a.length() != b.length())
return a.length() < b.length();
//조건2
else if (sum(a) != sum(b))
return sum(a) < sum(b);
//조건3
else
return a < b;
}
int main() {
vector<string> guitar;
string num;
int n, temp;
cin >> n;
temp = n;
while (temp != 0) {
cin >> num;
guitar.push_back(num);
temp--;
}
sort(guitar.begin(),guitar.end(),cmp);
int i;
for (i = 0; i < n; i++) {
cout << guitar[i] << endl;
}
}
정렬 방식으로 cmp (compare)함수를 구현해봤는데
a.length()<b.length() 는
a의 길이가 b의 길이보다 짧으면 true,
즉 정렬이 이루어져
길이가 짧은 순으로 정렬된다
정도로 이해하면 될 것 같다
'Algorithm > 문제풀이' 카테고리의 다른 글
[C++] 백준 알고리즘 10757번 큰 수 A+B (0) | 2021.09.12 |
---|---|
[C++] 백준 알고리즘 11651번 좌표 정렬하기 2 (0) | 2021.09.09 |
[C++] 백준 알고리즘 1316번 그룹 단어 체커 (0) | 2021.09.09 |
[C] 큐 : 백준 알고리즘 2164번 카드2 (0) | 2021.07.15 |
[C] 스택 : 백준 알고리즘 9012번 괄호 (0) | 2021.07.11 |