1431번: 시리얼 번호
첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어
www.acmicpc.net
아스키 코드
기억해두기 :
A = 65
Z = 90
a = 97
z = 122
0 = 48
9 = 57
이거랑 vector의 pair을 이용해서 compare 함수를 통해 열심히 비교해줬는 데
compare 함수를 쓰는 데서 해결 못함
[C++] 백준 1431번 시리얼 번호 (tistory.com)
[C++] 백준 1431번 시리얼 번호
1. 문제이해 https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의
beginnerdeveloper-lit.tistory.com
여기서 compare 함수의 작동 방식을 확인해서
pair 이용한 코드로 알맞게 수정해줬더니 맞았다
내 최종 코드는
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<pair<int, string>> v;
bool cmp(pair<int, string> a, pair<int, string> b){
int asize = a.first;
int bsize = b.first;
int asum = 0;
int bsum = 0;
//1. 길이가 짧은 것이 먼저 오도록 sort
if(a.first!= b.first) {
return a.first < b.first;
}
//2.길이가 같으면, 숫자의 합이 적은 순서대로 sort
for(int i=0; i<a.first; i++){
// 문자열 a에 포함된 정수 합 계산
if(a.second[i] >= 48 && a.second[i] <= 57){
asum += int(a.second[i]) - '0';
}
//문자열 b에 포함된 정수 합 계산
if(b.second[i] >= 48 && b.second[i] <= 57){
bsum += int(b.second[i]) - '0';
}
}
if(asum != bsum){
return asum < bsum;
}
return a.second < b.second;
}
int main()
{
int n;
cin >> n;
string s;
for(int i=0; i<n; i++){
cin >> s;
v.push_back({s.length(),s});
}
sort(v.begin(), v.end(), cmp);
for(int i=0; i<n; i++){
cout <<v[i].second << "\n";
}
return 0;
}
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 10989번 C++] 수 정렬하기 3 (0) | 2023.09.28 |
---|---|
[백준 18870번 C++] 좌표 압축 (0) | 2023.09.28 |
[백준 2947번 C++] 나무 조각 (0) | 2023.09.27 |
[백준 10814번 C++] 나이순 정렬 (0) | 2023.09.26 |
[백준 1427번 C++] 소트인사이드 (0) | 2023.09.26 |