일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 회고록
- DP
- c++
- BFS
- 2023
- 세그먼트 트리
- lazy propagation
- 미래는_현재와_과거로
- 가끔은_말로
- 플로이드 와샬
- NEXT
- 자바스크립트
- 알고리즘
- 너비 우선 탐색
- 크루스칼
- dfs
- Overfitting
- 백트래킹
- object detection
- 가끔은 말로
- tensorflow
- 분할 정복
- 다익스트라
- 조합론
- back propagation
- 문자열
- 이분 탐색
- dropout
- 우선 순위 큐
- pytorch
Archives
- Today
- Total
Doby's Lab
[C++] 백준 1431번: 시리얼 번호, sort에서 더 깊게 파고든 compare 본문
이번 문제는 sort함수를 이용하며 compare에 더 깊게 파고들었다.
sort 할 때 compare 함수를 다음 코드로 짜서 컴파일했지만 계속 어디서 나는지도 모를 오류 Invalid Comparator가 발생한다. (Comparator라서 비교 함수 쪽에 문제가 있구나는 인식할 수 있었다.)
bool cmp(string a, string b) {
if (a.size() < b.size()) {
return a < b;
}
else {
int sumA = 0;
int sumB = 0;
for (int i = 0; i < a.size(); i++) {
if (a[i] < 10 && a[i] >= 0) {
sumA += a[i];
}
if (b[i] < 10 && b[i] >= 0) {
sumB += b[i];
}
}
if (sumA < sumB) {
return a < b;
}
else {
int cnt = 0;
while (1) {
if (cnt == a.size()) {
break;
}
if (a[cnt] < b[cnt]) {
return a < b;
}
cnt++;
}
}
}
}
계속 하나씩 수정해나가면서 풀어냈긴 했지만 해답은 찾지 못했다.
정답 cmp함수
bool cmp(string a, string b) {
if (a.size() != b.size()) {
// 첫번째 비교 조건
return a.size() < b.size();
}
else {
int sumA = 0;
int sumB = 0;
for (int i = 0; i < a.size(); i++) {//a와 b의 크기가 같을 때이므로 a사이즈를 가지고 해도 됨\
// 숫자의 아스키코드는 숫자 그 자체로 착각하고 있었다.
if (a[i] <= 57 && a[i] >= 48) {
sumA += a[i] - '0';
}
if (b[i] <= 57 && b[i] >= 48) {
sumB += b[i] - '0';
}
}
if (sumA != sumB) {
// 2번째 비교 조건
return sumA < sumB;
}
else {
// 주석 처리 해둔 3번째 조건이 필요 없는 이유
// 이미 크기가 같음
// 아스키 코드에서도 숫자가 영어보다 더 작기 때문에 바로 a < b로 리턴해도 된다.
return a < b;
}
/*
int cnt = 0;
while (1) {
if (cnt == a.size()) {
break;
}
if (a[cnt] != b[cnt]) {
//3번째 비교 조건
return a[cnt] < b[cnt];
}
cnt++;
}
*/
}
}
그래도 이걸 고치면 되겠다 라고 생각이 들어서 정리를 했던 건
1. if의 조건이 크고 작음을 나타내면 안 된다 ('!=' 이 연산자로 다른 지만 파악해야 함)
2. 2번째 비교 조건에서 return sumA < sumB가 통하는 이유를 모르겠다.
728x90
'C++' 카테고리의 다른 글
[C++] 포인터 개념, 백준 1838번: 버블 정렬 (2) (0) | 2021.10.01 |
---|---|
[C++] 백준 10825번: 국영수, 구조체 선언, 입력 자료형을 무시하지 말자 (0) | 2021.10.01 |
[C++] 백준 1152번: 단어의 개수, 문자열 입력(getline(),cin.get(), cin.getline(), cin.ignore()) (0) | 2021.09.03 |
[C++] 소수점 자리 설정, cout.precision(), fixed (0) | 2021.09.02 |
[C++] 백준 1181번: 단어 정렬 (sort의 optional function) (2) | 2021.09.02 |