길민호(ethan.mino)
코딩수첩
길민호(ethan.mino)
전체 방문자
오늘
어제
  • 분류 전체보기 (215)
    • Computer Science (0)
    • Web (6)
      • CSS (0)
      • HTML (0)
    • Node.js (0)
    • Javascript (2)
    • Java (46)
      • Spring (27)
      • Jsp (0)
    • C\C++ (2)
    • Programming (0)
    • AI (0)
    • Database (7)
    • Git (5)
    • Algorithm (119)
      • Stack (0)
      • Queue (0)
      • Linked List (0)
      • Sort (0)
      • Simulation (27)
      • Recursion (0)
      • Backtracking (4)
      • Two Pointer (3)
      • Dynamic Programming (19)
      • Greedy (10)
      • Graph (3)
      • Dijkstra (1)
      • BFS\DFS (8)
      • Floyd (1)
      • MST (4)
      • Tree (4)
      • Binary Search (8)
      • Binary Search Tree (4)
    • IntelliJ (4)
    • Vscode (0)
    • Operating System (0)
    • 후기 (3)
    • 성장일지 (13)
    • 스터디 (7)
    • 설치 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅡ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
길민호(ethan.mino)

코딩수첩

Algorithm

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

2022. 4. 12. 03:18

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

 

1431번: 시리얼 번호

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

www.acmicpc.net


#include <bits/stdc++.h>
using namespace std;

int s(const string & str){  // 자리수 합을 구하는 함수
    int sum = 0;
    for(int i = 0; i < str.size(); i++)
        if(str[i] >= 48 && str[i] <= 57)    // 해당 문자가 숫자인 경우, 더해줌
            sum += str[i] - 48;
    return sum;
}

bool cmp(const string& a, const string &b){
    int len1 = a.size(), len2 = b.size();
    if(len1 == len2){   // 길이가 같으면
        int s1 = s(a), s2 = s(b);
        if(s1 == s2) return a < b;  // 자리수 합이 같은 경우, 사전순으로 정렬
        else return s1 < s2;    // 자리수 합이 같지 않으면, 자리수 합으로 정렬
    }else return len1 < len2;   // 길이로 정렬
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n; cin >> n;
    string arr[50];
    for(int i = 0; i < n; i++) cin >> arr[i];
    sort(arr, arr + n, cmp);
    for(int i = 0; i < n; i++) cout << arr[i] << "\n";
}

 

 

'Algorithm' 카테고리의 다른 글

[백준 7795번] 먹을 것인가 먹힐 것인가 (C++)  (0) 2022.04.12
[백준 5648번] 역원소 정렬 (C++)  (0) 2022.04.12
[백준 11652번] 카드 (C++)  (0) 2022.04.12
[백준 1541번] 잃어버린 괄호 (C++)  (0) 2022.04.07
[백준 11660번] 구간 합 구하기 5 (C++)  (0) 2022.04.07
    'Algorithm' 카테고리의 다른 글
    • [백준 7795번] 먹을 것인가 먹힐 것인가 (C++)
    • [백준 5648번] 역원소 정렬 (C++)
    • [백준 11652번] 카드 (C++)
    • [백준 1541번] 잃어버린 괄호 (C++)
    길민호(ethan.mino)
    길민호(ethan.mino)
    💻 호기심 많은 서버 개발자 길민호입니다.

    티스토리툴바