728x90
문제
https://www.acmicpc.net/problem/1431
사용한 알고리즘
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 |
댓글