문제
"맞았습니다."코드
#include <bits/stdc++.h>
using namespace std;
string numberst = "0123456789";
vector<string> v;
bool cmp(string &a, string &b){
int asize = a.size(), bsize = b.size();
int asum = 0, bsum = 0;
if(asize != bsize) return asize < bsize;
for(int i = 0; i < asize; i++){
if(numberst.find(a[i]) <= numberst.size()) asum += (a[i] - '0');
}
for(int i = 0; i < bsize; i++){
if(numberst.find(b[i]) <= numberst.size()) bsum += (b[i] - '0');
}
if(asum != bsum) return asum < bsum;
return a < b;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n;
string st;
cin >> n;
for(int i = 0; i < n; i++){ cin >> st; v.push_back(st);}
sort(v.begin(), v.end(), cmp);
for(auto i : v) cout << i << '\n';
return 0;
}
리뷰
비교함수를 조건대로 구현하는건 어렵지 않게 느껴졌는데.
find 함수를 틀리게 쓰는 것을 모르고.. 시간을 조금 허비했다.
numberst.find(b[i]) <= numberst.size()
이렇게 써야 하는데
[ 틀린 코드 ] numberst.find(b[i]) <= b.size()
이렇게 b문자열 사이즈와 비교하고 있어서 틀린거였다.
숫자 문자열 numberst 를 만들어 놨다.
문자열을 순회하면서 이 문자가 numberst의 어디 인덱스에 속하냐를 묻는건데.
..... 앞으로 조심하자.
string 의 find() 함수 c++ reference
첫 번째로 매칭되는 문자의 인덱스를 리턴해준다.
find() 함수
범위 안에 원하는 값을 찾는 함수.
int myints[] = {10, 20, 30, 40};
int* p;
p = std::find(myints, myints + 4, 30);
if (p != myints + 4)
std::cout << "Element found in myints: " << *p << '\n';
else
std::cout << "Element not found in myints\n";
728x90
'알고리즘 > 백준' 카테고리의 다른 글
구간 합 구하기4 백준 11659 c++ (0) | 2021.12.23 |
---|---|
1,2,3 더하기 백준 9095번 c++ (0) | 2021.12.22 |
국영수 백준 10825 c++ (0) | 2021.12.21 |
접미사 배열 백준 11656 c++ (0) | 2021.12.20 |
1로 만들기 백준 1463번 c++ (0) | 2021.12.20 |