백준

백준 1431 시리얼 번호 c++

2024. 3. 13. 19:19

 

 

 

처음 작성한 코드는 다음과 같다.

하지만 틀렸다는 결과가 나왔다.

cmp함수 구현하는 방법을(>, < 부등호의 사용) 다시 알아 봐야겠다. 그리고 합할 때 개수를 구하는 게 아니라 모든 값의 합을 구하는 부분에서 틀렸다.

그리고 벡터 꼭 안써도 string 배열로 입력받아도 되긴되는 것 같다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

bool cmp(string a, string b){
    if(a.length() == b.length()){
        int na, nb = 0;
        for(int i=0; i<a.length(); i++)
            if( 48<=a[i] && a[i]<=57)
                na++;
        for(int i=0; i<b.length(); i++)
            if( 48<=b[i] && b[i]<=57)
                nb++;   
        if(na > nb)
            return a > b;
        if(na < nb)
            return a < b;        
    }
    if(a.length() > b.length())
        return a > b;
    if(a.length() < b.length())
        return a < b;    
    if(a > b)
        return a > b;
    else 
        return a < b;
}

int main(){
    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";
    return 0;
}

 

 

 

 

'백준' 카테고리의 다른 글

백준 10816 숫자 카드 2 c++  (0) 2024.03.14
백준 1920 수 찾기 c++  (0) 2024.03.14
백준 10825 국영수 c++  (0) 2024.03.13
백준 11659 구간 합 구하기 4 c++  (0) 2024.03.12
백준 11048 이동하기 c++  (0) 2024.03.11