문제
https://school.programmers.co.kr/learn/courses/30/lessons/17686
예시 코드
function solution(filenames) {
const parsedFilenames = filenames.map(parseFilename);
parsedFilenames.sort((a, b) => {
if (a.head < b.head) return -1;
if (a.head > b.head) return 1;
return a.number - b.number;
});
return parsedFilenames.map((file) => file.name);
}
function parseFilename(filename) {
const regex = /^([^\d]+)(\d+)(.*)$/;
const [NAME, HEAD, NUMBER, TAIL] = filename.match(regex);
return {
name: NAME,
head: HEAD.toLowerCase(),
number: parseInt(NUMBER, 10),
tail: TAIL,
};
}
풀이
정해진 기준에 따라 파일명을 정렬하는 문제입니다.
먼저 parseFilename 함수를 사용하여 각 파일명을 HEAD, NUMBER, TAIL로 분리합니다. 이 함수는 정규 표현식을 사용하여 파일명을 분석하고, 분석된 결과를 객체로 반환합니다.
사용된 정규 표현식은 다음과 같습니다.
const regex = /^([^\d]+)(\d+)(.*)$/;
- ^([^\d]+)
이 부분은 문자열의 처음(^)에서 시작해, 하나 이상(+)의 숫자가 아닌 문자([^\d])들을 매칭합니다. HEAD에 해당합니다. - (\d+)
이 부분은 하나 이상(+)의 숫자(\d)들을 매칭합니다. NUMBER에 해당합니다. - (.*)$
이 부분은 어떤 문자(.)든지 0개 이상(*) 매칭할 수 있으며, 문자열의 끝($)까지 계속됩니다. TAIL에 해당합니다.
이후 배열을 규칙에 맞춰 정렬한 후 반환합니다.
'Code Problems > String' 카테고리의 다른 글
BOJ 14426 접두사 찾기 (0) | 2023.12.21 |
---|