Code Problems/String

[프로그래머스] 2018 카카오 블라인드 채용 - [3차] 파일명 정렬

Yepchani 2024. 3. 10. 18:07

문제

 

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+)(.*)$/;
  1. ^([^\d]+)
    이 부분은 문자열의 처음(^)에서 시작해, 하나 이상(+)의 숫자가 아닌 문자([^\d])들을 매칭합니다. HEAD에 해당합니다.
  2. (\d+)
    이 부분은 하나 이상(+)의 숫자(\d)들을 매칭합니다. NUMBER에 해당합니다.
  3. (.*)$
    이 부분은 어떤 문자(.)든지 0개 이상(*) 매칭할 수 있으며, 문자열의 끝($)까지 계속됩니다. TAIL에 해당합니다.

이후 배열을 규칙에 맞춰 정렬한 후 반환합니다.

'Code Problems > String' 카테고리의 다른 글

BOJ 14426 접두사 찾기  (0) 2023.12.21