작성일 : January 1, 2022
문제 : https://programmers.co.kr/learn/courses/30/lessons/17686
해설 : https://jaekwan.tistory.com/132?category=990965
설명과 같이 HEAD, NUMBER, TAIL 까지 쪼갰는데 정렬을 실패함,,
//소스 파일 저장소에 저장된 파일명은 100 글자 이내로,
//영문 대소문자, 숫자, 공백(" "), 마침표("."), 빼기 부호("-")만으로 이루어져 있다.
//파일명은 영문자로 시작하며, 숫자를 하나 이상 포함하고 있다.
/*
NUMBER는 한 글자에서 최대 다섯 글자 사이의 연속된 숫자로 이루어져 있으며, 앞쪽에 0이 올 수 있다.
0부터 99999 사이의 숫자로, 00000이나 0101 등도 가능하다.
TAIL은 그 나머지 부분으로, 여기에는 숫자가 다시 나타날 수도 있으며, 아무 글자도 없을 수 있다.
*/
function solution(files) {
const lowerCaseFiles = files.map(word => {const numberIndex = [];
for(let i=0; i<word.length; i++) {
if(i-1 >= 0) {
if(!Number.isNaN(+word[i-1]) && Number.isNaN(+word[i])) break;
}
if(!Number.isNaN(+word[i]) && word[i] !== " ") numberIndex.push(i);
}
return {
head: word.slice(0, numberIndex[0]),
number: word.slice(numberIndex[0], numberIndex[numberIndex.length-1]+1),
tail: word.slice(numberIndex[numberIndex.length-1]+1),
}
});
//console.log(lowerCaseFiles)
//lowerCaseFiles.forEach(obj => console.log(obj.head[0]))
lowerCaseFiles.sort((a,b) => {
if(a.head.toLowerCase() > b.head.toLowerCase()) return 1;
else if(a.head.toLowerCase() < b.head.toLowerCase()) return -1;
else return a.number - b.number;
});
return lowerCaseFiles.map(obj => Object.values(obj).join(''));
}
/*
정확성: 20.0
효율성: 0.0
합계: 20.0 / 50
*/
function solution(files) {
var answer = [];
let file = [];
// 주어진 파일들을 입력받는 부분.
for(let i=0; i<files.length; i++){
let head = /^[\\D]*/g.exec(files[i])[0];
files[i] = files[i].replace(/^[\\D]*/g,'');
let number = /[\\d]*/g.exec(files[i])[0];
files[i] = files[i].replace(/[\\d]*/,'');
let tail = files[i];
file.push( {'head':head, 'number':number, 'tail':tail});
}
// head 부분 기준 사전 순 정렬.
file.sort((a,b) => {
let aHead = a.head.toLowerCase();
let bHead = b.head.toLowerCase();
if(aHead < bHead) return -1;
else if(aHead > bHead) return 1;
else {
let aNumber = parseInt(a.number);
let bNumber = parseInt(b.number);
if(aNumber < bNumber) return -1;
else if(aNumber > bNumber) return 1;
else return 0;
}
})
for(let i=0; i<file.length; i++){
let fileName = file[i].head + file[i].number + file[i].tail;
answer.push(fileName);
}
return answer;
}
정규표현식을 공부해봐야 할것 같다,,