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;
}