-
[프로그래머스] 파일명 정렬 자바스크립트(Javascript)알고리즘(algorithm)/프로그래머스 2022. 1. 7. 16:23
문제
https://programmers.co.kr/learn/courses/30/lessons/17686?language=javascript
코딩테스트 연습 - [3차] 파일명 정렬
파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램
programmers.co.kr
풀이
function solution(files) { const answer = [...files]; answer.sort((a, b) => { const headA = a.match(/^\D+/)[0].toLowerCase(); const headB = b.match(/^\D+/)[0].toLowerCase(); const numberA = parseInt(a.match(/\d+/)[0], 10); const numberB = parseInt(b.match(/\d+/)[0], 10); if (headA < headB) return -1; if (headA > headB) return 1; return numberA - numberB; }); return answer; }
해설
이 문제는 head와 number을 나누는것이 가장 중요하다.
정규표현식에 대해 설명을 하자면,
^는 맨 처음을 나타내는 것이고, +는 한글자가 아닌 이어진 문자를 나타낸다. (추가로 g를 붙이면 전체를 나타낸다.)
D는 문자열을 나타내고, d는 숫자를 나타낸다.
그리고 match를 사용하면 추출된 어떠한 값이 배열로 나오기 때문에, index를 지정해줘야 한다.
2중 sort 연산을 통해 처음에는 head 즉 문자열의 순서를 비교하고, 만약, 문자가 같다면 다음 숫자의 연산을 사용한다.
toLowerCase를 사용하지 않는다면 sort에서 대문자 우선이 나오기 때문에 Upper나 Lower를 사용해야한다.
'알고리즘(algorithm) > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 실패율 자바스크립트(Javascript) (0) 2022.03.01 [프로그래머스] 신고 결과 받기 자바스크립트(Javascript) (0) 2022.03.01 [프로그래머스] 프렌즈 4블록 자바스크립트(Javascript) (0) 2022.01.10 [프로그래머스] 카카오 다트 게임 자바스크립트(Javascript) (0) 2021.11.26 [프로그래머스] 다리를 지나는 트럭 자바스크립트(Javascript) (0) 2021.11.26