반응형
https://programmers.co.kr/learn/courses/30/lessons/17686
문자열 파싱 후 정렬하는 문제였습니다.
풀이방법
stl sort함수는 unstable quick sort입니다. 따라서 정해진 기준 외에 놔둬야 하는 문자열들의 서순이 뒤바뀔 수 있습니다. 때문에 stable_sort함수를 사용해 기준이 없는 문자열의 서순을 바꾸지 않도록 한다면 맞을 수 있습니다.
1. Head, Number를 문자열 파싱으로 구합니다.
2. Tail은 정렬기준에 해당하지 않기 때문에 Number를 구할때 첫번째로 숫자가 나온 문자부터 끝까지 떼어 옵니다. 그 후 stoi함수의 인자로 넘겨준다면 숫자인 부분까지 알아서 int형으로 바꾼 후 반환해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
string getHead(string s){
string tmp;
string tmpS = s;
for(int i = 0; i < tmpS.size(); i++){
if('0' <= tmpS[i] && tmpS[i] <= '9') break;
if('A' <= tmpS[i] && tmpS[i] <= 'Z') tmpS[i] = tmpS[i] - 'A' + 'a';
tmp += tmpS[i];
}
return tmp;
}
string getNumber(string s){
int idx = 0;
for(int i = 0; i < s.size(); i++){
if('0' <= s[i] && s[i] <= '9'){
idx = i;
break;
}
}
return s.substr(idx);
}
bool cmp(string a, string b){
string aHead = getHead(a);
string bHead = getHead(b);
if(aHead == bHead){
string aNum = getNumber(a);
string bNum = getNumber(b);
return stoi(aNum) < stoi(bNum);
}
return aHead < bHead;
}
vector<string> solution(vector<string> files) {
stable_sort(files.begin(),files.end(),cmp);
return files;
}
'Algorithm > Sorting' 카테고리의 다른 글
(C++) - 프로그래머스(위클리 챌린지) : 6주차 (0) | 2021.09.15 |
---|---|
(C++) - 백준(BOJ) 20207번 : 달력 (0) | 2021.08.16 |
(C++) - 백준(BOJ) 11497번 : 통나무 건너뛰기 (0) | 2021.05.01 |
(C++) - 백준(BOJ) 1431번 : 시리얼 번호 답 (0) | 2021.05.01 |
(C++) - 백준(BOJ) 10825번 : 국영수 답 (0) | 2021.05.01 |