-
[백준/BOJ] 1431번 시리얼 번호 (C++)알고리즘 문제풀이/백준 2021. 1. 10. 20:44
정렬 유형의 문제입니다.
길이, 숫자 자리수의 합, 사전순대로 비교를 하기 위해서 cmp 함수를 따로 만들어줬습니다. 그리고 숫자 자리수의 합을 기준으로 정렬하기 위해서 자리수의 합을 구하기 위한 함수로 getSum 함수를 만들었습니다.
#include <iostream> #include <vector> #include <algorithm> using namespace std; int getSum(string str) { int sum = 0; for(int i = 0; i < str.size(); i++) { if(str[i] >= '0' && str[i] <= '9') sum += (str[i] - '0'); } return sum; } int cmp(string a, string b) { if(a.size() == b.size()) { if(getSum(a) == getSum(b)) return a < b; // 사전순 비교 return getSum(a) < getSum(b); // 숫자 자리수의 합 비교 } return a.size() < b.size(); // 길이 비교 } int main(void) { ios_base::sync_with_stdio(false); cin.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(), cmp); for(int i = 0; i < n; i++) { cout << v[i] << "\n"; } }
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준/BOJ] 5648번 역원소 정렬 (C++) (0) 2021.01.10 [백준/BOJ] 11652번 카드 (C++) (0) 2021.01.10 [백준/BOJ] 11931번 수 정렬하기 4 (C++) (0) 2021.01.10 [백준/BOJ] 2751번 수 정렬하기 2 (C++) (0) 2021.01.10 [백준/BOJ] 11728번 배열 합치기 (C++) (0) 2021.01.10