배운것
- isdigit 함수: 숫자를 판단하는 함수
C언어 : <ctype.h>
C++ : <cctype>
int isdigit(int c);
매개변수로 들어온 char 타입이 10진수 숫자로 변경이 가능하면 0이 아닌 숫자(true), 아니면 0(false)를 반환하는 함수
- 문자 -> 숫자 변환
1) isdigit(문자)으로 숫자 될 수 있는지 확인
2) ex. 문자= 5 일 때
아스키코드상 수로 표시된 문자열은 다음과 같음
문자 5는 아스키코드 번호로 53임.
우리는 이걸 숫자 5로 바꿔주고 싶음
그럴 때
문자 - '0'(아스키코드로 48) 를 해주면
문자 5(아스키코드로 53) - '0'(아스키코드로 48) = 숫자 5
- 리턴값은 원본(a,b)가 아니라 비교해준 값을 그냥 리턴해주면 되나봄.
정답 코드
// Authored by : std-freejia
// Co-authored by : BaaaaaaaaaaarkingDog
// http://boj.kr/94521fc9def24d4bb4e041ec211b2ba4
#include <bits/stdc++.h>
using namespace std;
int n;
string st;
vector<string> v;
bool cmp (string& a, string& b){
int lena = a.size(), lenb = b.size();
int suma = 0, sumb = 0;
if(lena != lenb) return lena < lenb;
for(int i = 0; i < lena; i++){ // 숫자만 더한다.
if(isdigit(a[i])) suma += (a[i] - '0');
}
for(int i = 0; i < lenb; i++){
if(isdigit(b[i])) sumb += (b[i] - '0');
}
if(suma != sumb) return suma < sumb;
return a < b; // 사전순
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
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';
}
'Algorithm > C++' 카테고리의 다른 글
[백준 11652] 카드 (0) | 2022.09.26 |
---|---|
[백준 2573] 빙산 (0) | 2022.09.26 |
[백준 10825] 국영수 (0) | 2022.09.25 |
[백준 11650] 좌표 정렬하기 (0) | 2022.09.23 |
[백준 15688] 수 정렬하기 5 (0) | 2022.09.21 |
댓글