https://www.acmicpc.net/problem/1431
<코드>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <cstdio>
using namespace std;
bool cmp(string s1,string s2)
{
int sums1 = 0;
int sums2 = 0;
if(s1.size()==s2.size())
{
for(int i=0;i<s1.size();i++)
{
if(s1[i]>='0' && s1[i]<='9')
{
sums1 += (s1[i] - '0');
}
if(s2[i]>='0' && s2[i]<='9')
{
sums2 += (s2[i] - '0');
}
}
if(sums2==sums1){
return s1<s2;
}
else{
return sums1<sums2;
}
}
else return s1.size()<s2.size();
}
int main()
{
int n;
cin>>n;
string str;
vector<string>v;
for(int i=0;i<n;i++)
{
cin>>str;
v.push_back(str);
}
sort(v.begin(),v.end(),cmp);
for(int i=0;i<n;i++)
{
cout<<v[i]<<'\n';
}
}
<풀이과정>
우선적으로 길이가 짧은 것은 가장 먼저 출력해주고, 길이가 같다면 각 자리의 숫자의 합(알파벳은 제외시켜줘야함 !)이 작은 것을 먼저 출력해주는 cmp함수를 만들어주고, 정렬시켜줄때 함수의 마지막 인자에 cmp를 넣어주면 된다. 여기에서 문자를 숫자로 변환시켜주기 위해 (s[i]-'0')가 사용되었다.
'PS > 문자열 알고리즘[String]' 카테고리의 다른 글
백준 11478 서로 다른 부분 문자열의 개수(c++) (1) | 2022.07.11 |
---|---|
백준 1120 문자열(c++) (0) | 2022.07.08 |
백준 11656 접미사 배열(c++) (1) | 2022.07.08 |
백준 1212 8진수 2진수(c++) (0) | 2022.07.06 |
백준 1373 2진수 8진수(c++) (0) | 2022.07.06 |