https://programmers.co.kr/learn/courses/30/lessons/17686/solution_groups?language=cpp
아 어렵다! 실전에서 시간 안에 풀 수 있을까
bool sortNumber(const string& left, const string& right) {
int leftIdx = 0, rightIdx = 0;
while (!isdigit(left[leftIdx])) {
leftIdx++;
}
while (!isdigit(right[rightIdx])) {
rightIdx++;
}
string leftNum;
string rightNum;
int leftConvertNum = 0, rightConvertNum = 0, numCnt = 1;
while (isdigit(left[leftIdx]) && numCnt <= 5 && leftIdx < left.size()) {
leftNum += left[leftIdx++];
numCnt++;
}
numCnt = 1;
while (isdigit(right[rightIdx]) && numCnt <= 5 && rightIdx < right.size()) {
rightNum += right[rightIdx++];
numCnt++;
}
leftConvertNum = stoi(leftNum);
rightConvertNum = stoi(rightNum);
return leftConvertNum < rightConvertNum;
}
bool sortHead(const string& s1, const string& s2) {
string leftString;
string rightString;
for (int i = 0; !isdigit(s1[i]); i++) {
leftString += tolower(s1[i]);
}
for (int i = 0; !isdigit(s2[i]); i++) {
rightString += tolower(s2[i]);
}
return strcmp(leftString.c_str(), rightString.c_str()) < 0;
}
vector<string> solution(vector<string> files) {
vector<string> answer;
stable_sort(files.begin(), files.end(), sortNumber);
stable_sort(files.begin(), files.end(), sortHead);
answer = files;
return answer;
}