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;
}