🔗 문제 링크
https://programmers.co.kr/learn/courses/30/lessons/17686
✏️ 풀이
function solution(files) {
return files.sort((a, b) => {
const [, aHead, aNum] = a.match(/(\D+)(\d{1,5})(.*)/);
const [, bHead, bNum] = b.match(/(\D+)(\d{1,5})(.*)/);
const aLowerHead = aHead.toLowerCase();
const bLowerHead = bHead.toLowerCase();
if (aLowerHead === bLowerHead) {
return Number(aNum) - Number(bNum);
} else {
if (aLowerHead > bLowerHead) {
return 1;
} else if (aLowerHead < bLowerHead) {
return -1;
} else {
return 0;
}
}
});
}
먼저 비교하고자 하는 두 파일명에서 HEAD와 NUMBER를 분리해내야 한다. String.prototype.match를 활용하여 HEAD, NUMBER, TAIL을 모두 분리할 수 있다. String.prototype.match의 결과값은 배열이며, 배열의 첫 번째 요소는 문자열 전체, 두 번째부터는 정규표현식에서 소괄호 안에 캡처된 결과가 순서대로 나온다.
예를 들어, 'foo010bar020.zip'.match(/(\D+)(\d{1,5})(.*)/)의 반환값은 ['foo010bar020.zip', 'foo', '010', 'bar020.zip', index: 0, input: 'foo010bar020.zip', group: undefined]이 된다. (index, input, group은 이 문제를 푸는 것과 관계가 없으니 넘어가겠다)
이렇게 구한 HEAD와 NUMBER로 sort 함수의 콜백함수를 완성하면 된다.
HEAD는 모두 소문자로 만들어 비교하도록 하고, NUMBER는 Number(NUMBER)의 값의 대소비교를 하면 된다.
'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글
[프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript (0) | 2022.06.13 |
---|---|
[프로그래머스 Level 2] n진수 게임 - JavaScript (0) | 2022.06.11 |
[프로그래머스 Level 2] 압축 - JavaScript (0) | 2022.06.10 |
[프로그래머스 Level 2] 방금그곡 - JavaScript (0) | 2022.06.10 |
[프로그래머스 Level 3] 여행경로 - JavaScript (0) | 2022.06.10 |