https://school.programmers.co.kr/learn/courses/30/lessons/17686
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
enum EType { HEAD, NUMBER, END };
vector<string> conversion(const string& file)
{
vector<string> v{ END, "" }; // HEAD, NUMBER 만 사용
for (size_t i = 0; i < file.length(); ++i)
{
if (isdigit(file[i]))
{
v[NUMBER] += file[i];
continue;
}
if (!v[NUMBER].empty()) break; // NUMBER 칸에 문자가 있다는 것은 file이 NUMBER 구간을 넘어서서 TAIL에 들어섰다는 것
else v[HEAD] += tolower(file[i]);
}
return v;
}
vector<string> solution(vector<string> files) {
const auto& condition = [](const auto& f1, const auto& f2) {
const auto& a = conversion(f1);
const auto& b = conversion(f2);
return (a[HEAD] != b[HEAD]) ? a[HEAD] < b[HEAD] : stoi(a[NUMBER]) < stoi(b[NUMBER]);
};
stable_sort(files.begin(), files.end(), condition); // 기존 순서를 보장하지 않는 sort() 대신 기존 순서를 보장하는 것 사용
return files;
}
'Coding Test > Programmers' 카테고리의 다른 글
[Programmers] Lv 2. 2 x N 타일링 (0) | 2023.07.19 |
---|---|
[Programmers] (2018 KAKAO BLIND RECRUITMENT) Lv 2. [1차] 프렌즈4블록 (0) | 2023.07.18 |
[Programmers] (stack) Lv 2. 뒤에 있는 큰 수 찾기 (0) | 2023.07.14 |
[Programmers] (완전탐색) Lv 2. 모음사전 (0) | 2023.07.14 |
[Programmers] (Summer/Winter Coding(~2018)) Lv 2. 스킬트리 (0) | 2023.07.12 |
댓글