백준 1431 시리얼 번호 / C++

이유참치·2025년 7월 31일

백준

목록 보기
19/249

문제 : 1431

풀이 point

사용자 정의 함수를 통해 기준을 설정해주면 된다.

풀이 방법

a가 b의 앞에 와야할 때 true, 그렇지 않을 때 false를 반환하는 사용자 정의 함수를 만들어서 sort 함수에 전달한다.

숫자만 덧셈에서 숫자를 판단하는 방법은
'0' <= s[i] && s[i] <= '9'이다.
s[i]-'0'을 하면 숫자로 덧셈을 진행할 수 있다.

풀이 코드

//백준 1431, 시리얼 번호

#include <iostream>
#include <algorithm>

std::string serial[51];

//a가 b의 앞에 와야할 때 true, 그렇지 않을 때 false
bool userSort(std::string_view a, std::string_view b){
    if(a.size() != b.size()) return a.size() < b.size();
    else{
        int sumA{0}; int sumB{0};
        for(int i{0}; i<a.size(); ++i){
            if('0' <= a[i] && a[i] <= '9') sumA += a[i] - '0';
        }
        for(int i{0}; i<b.size(); ++i){
            if('0' <= b[i] && b[i] <= '9') sumB += b[i] - '0';
        }
        if(sumA != sumB) return sumA < sumB;
        return a < b;
    } 
}

int main (){

    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    std::cout.tie(NULL);
    
    int N;
    std::cin >> N;
    
    for(int i{0}; i<N; ++i)
        std::cin >> serial[i];    
    
    std::sort(serial, serial+N, userSort);

    for(int i{0}; i<N; ++i)
        std::cout << serial[i] << '\n';
    

    return 0;
}

2025-01-27T03:59:30.883Z

profile
임아리 - 대학생

0개의 댓글