파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다. 이때, 문자열 비교 시 대소문자 구분을 하지 않는다. MUZI와 muzi, MuZi는 정렬 시에 같은 순서로 취급된다.
파일명의 HEAD 부분이 대소문자 차이 외에는 같을 경우, NUMBER의 숫자 순으로 정렬한다. 9 < 10 < 0011 < 012 < 13 < 014 순으로 정렬된다. 숫자 앞의 0은 무시되며, 012와 12는 정렬 시에 같은 같은 값으로 처리된다.
두 파일의 HEAD 부분과, NUMBER의 숫자도 같을 경우, 원래 입력에 주어진 순서를 유지한다. MUZI01.zip과 muzi1.png가 입력으로 들어오면, 정렬 후에도 입력 시 주어진 두 파일의 순서가 바뀌어서는 안 된다.
head / number / tail 을 나눠야되기 때문에
우선 number 의 시작과 끝을 구하면 head 와 tail 이 자동으로 구해질거라고 생각했다.
따라서 for 문을 돌리면서
if(Number.isInteger(parseInt(hey[i]))==true &&index_hey.length<=5 ){
if(first==0){
first=i;
}
// 처음숫자가 나오면 first 가 변한다.
index_hey+=hey[i]
final_index= Math.max(final_index,i);
//tail 를 찾기 위해 마지막으로 끝나는 number를 찾는다.
}
}
answer.push([hey.slice(0,first).join('')
,index_hey, hey.slice(final_index+1,hey.length).join('')])
//그다음 slice 형태로 자르면된다.
parseInt() 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환합니다.
parseint 는 그냥 10진수 형태로 형변환만 해주는 거라고 만 알고 있어
parseint(001) 이 들어가면 > 001 이 나올거라고 생각했었다. 1 이런형식으로 정수 형태로 바뀌는것을 알수 있었다.
isNaN() isNaN() 함수는 어떤 값이 NaN 인지 판별합니다.
이것을 통해 head 부분이 시작할때 공백이 존재하면 안된다는것을 ... 확인할수 있다.
function solution(files) {
var answer = [];
files.map((el,index)=>{
var hey= el.split('');
var index_hey='';
let number='',head='',tail='';
for(var i=0; i<hey.length; i++)
{
if(isNaN(parseInt(hey[i]))&&number.length==0)head+=hey[i]
else if(!isNaN(parseInt(hey[i]))&&tail.length==0&& number.length<=5)number+=hey[i]
else tail+=hey[i]
}
answer.push([head,number,tail])
})
answer.sort((a,b)=>{
var Upcase_a= a[0].toLowerCase() ;
var Upcase_b= b[0].toLowerCase() ;
if(Upcase_a>Upcase_b){
return 1;
}
else if( Upcase_a<Upcase_b){
return -1;
}
else{
const parseIntA = parseInt(a[1]), parseIntB = parseInt(b[1]);
return parseIntA - parseIntB;
}
})
return answer.map((el)=>el.join(''));
}
정규식을 이용하면 더 빨리 풀수 있다는것을 ..