https://programmers.co.kr/learn/courses/30/lessons/17686
function solution(files) {
var answer = [];
// 파일명 구분 H, N, T
// H - 사전순. 대소문자 구별X
// N - 맨앞 0 무시
// T 고려하지 않고 원래 순서대로 정렬 - 어차피 T무시니까 소문자 통일 가능
// for(var i=0; i<files.length; i++){
// files[i] = files[i].toLowerCase();
// } //비교할 때만 바꿔야 해.
var regexNum = /[0-9]/g;
files.sort((a,b)=>{
// regex에 매치되는 첫 Index 찾기
var numIndexA = a.indexOf((a.match(regexNum))[0]);
var numIndexB = b.indexOf((b.match(regexNum))[0]);
// Head 기준 정렬
var sortByHead = (a.substring(0, numIndexA)).toLowerCase().localeCompare(b.substring(0, numIndexB).toLowerCase());
//1, -1, 0
if(sortByHead === 0) {// Num기준 정렬
var subStrA = parseInt(a.substring(numIndexA));
var subStrB = parseInt(b.substring(numIndexB));
if(subStrA<subStrB){
return -1;
}else if(subStrA>subStrB){
return 1;
}else {
return 0;
}
} else if(sortByHead === -1){ //이하 Head기준 정렬만
return -1;
} else {
return 1;
}
});
return files;
}
2.성공
function solution(files) {
var answer = [];
let answerWrap = files.map((file, index) => ({file, index}));
// 파일명 구분 H, N, T
// H - 사전순. 대소문자 구별X
// N - 맨앞 0 무시
// T 고려하지 않고 원래 순서대로 정렬 - 어차피 T무시니까 소문자 통일 가능
// for(var i=0; i<files.length; i++){
// files[i] = files[i].toLowerCase();
// } //비교할 때만 바꿔야 해.
var compare = (a,b)=>{
var regexNum = /[0-9]/g;
// regex에 매치되는 첫 Index 찾기
var numIndexA = a.indexOf((a.match(regexNum))[0]);
var numIndexB = b.indexOf((b.match(regexNum))[0]);
// Head 기준 정렬
var sortByHead = (a.substring(0, numIndexA)).toLowerCase().localeCompare(b.substring(0, numIndexB).toLowerCase());
// console.log((a.substring(0, numIndexA)).toLowerCase());
//1, -1, 0
if(sortByHead === 0) {// Num기준 정렬
var subStrA = parseInt(a.substring(numIndexA));
var subStrB = parseInt(b.substring(numIndexB));
if(subStrA<subStrB){
return -1;
}else if(subStrA>subStrB){
return 1;
}else {
return 0;
}
} else if(sortByHead === -1){
return -1;
} else {
return 1;
}
}
answerWrap.sort((a, b) => {
var result = compare(a.file, b.file);
return result === 0 ? a.index - b.index : result;
})
return answerWrap.map(answer => answer.file);
}