본문 바로가기
PS/Baekjoon

[백준/C++] 1431번: 시리얼번호(S3)

by 이지이즤 2022. 1. 12.
728x90

문제

https://www.acmicpc.net/problem/1431

 

1431번: 시리얼 번호

첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어

www.acmicpc.net

 

사용한 알고리즘

2022.01.11 - [PS/Algorithm] - [알고리즘 개념정리] 1. 정렬 (sort STL), 특정 변수 기준으로 정렬하기
-> 비교함수 정의, 연산자 오버로딩

풀이

문제 조건대로 정렬해주면 된다.
비교함수에서 두번째, 세번째 return 빼먹고 안썼다가 맞왜틀 계속했다,,
반례는 2 11 3A

소스코드

1. 비교함수 정의

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//비교함수 사용

struct Num{
    int len;
    int sum;
    string s;
}num[51];

bool cmp(const Num &a, const Num &b){
    if(a.len!=b.len) return a.len<b.len;
    else if(a.sum!=b.sum) return a.sum<b.sum;
    else return a.s<b.s;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n; cin>>n;
    for(int i=0; i<n; i++){
        cin>>num[i].s;
        num[i].len=num[i].s.length();
        for(int j=0; j<num[i].len; j++){
            if(num[i].s[j]<='9')
                num[i].sum += num[i].s[j]-'0';
        }
    }
    sort(num,num+n, cmp);
    for(int i=0; i<n; i++){
        cout<<num[i].s<<'\n';
    }
    return 0;
}


2. 연산자 오버로딩 사용

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//연산자 오버로딩 사용

struct Num{
    int len;
    int sum;
    string s;

    bool operator<(Num &other){
        if(len!=other.len) return len<other.len;
        else if(sum!=other.sum) return sum<other.sum;
        else return s<other.s;
    }
}num[51];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n; cin>>n;
    for(int i=0; i<n; i++){
        cin>>num[i].s;
        num[i].len=num[i].s.length();
        for(int j=0; j<num[i].len; j++){
            if(num[i].s[j]<='9')
                num[i].sum += num[i].s[j]-'0';
        }
    }
    sort(num,num+n);
    for(int i=0; i<n; i++){
        cout<<num[i].s<<'\n';
    }
    return 0;
}

 

728x90

'PS > Baekjoon' 카테고리의 다른 글

[백준/C++] 5525번: IOIOI(S2)  (2) 2022.01.16
[백준/C++] 2437번: 저울(G3)  (0) 2022.01.14
[백준/C++] 9009번: 피보나치(S1)  (0) 2022.01.14
[백준/C++] 18870번: 좌표 압축(S2)  (0) 2022.01.11
[백준] 맞왜틀 체크리스트  (0) 2022.01.11

댓글