본문 바로가기
코딩테스트/프로그래머스

[프로그래머스] 2018Kakao > 파일명 정렬 - 자바스크립트

by 핸디(Handy) 2021. 5. 10.

programmers.co.kr/learn/courses/30/lessons/17686

 

코딩테스트 연습 - [3차] 파일명 정렬

파일명 정렬 세 차례의 코딩 테스트와 두 차례의 면접이라는 기나긴 블라인드 공채를 무사히 통과해 카카오에 입사한 무지는 파일 저장소 서버 관리를 맡게 되었다. 저장소 서버에는 프로그램

programmers.co.kr


[ 아이디어 ]

정규식을 이용해 파일명의 숫자만 뽑고, 뽑은 숫자를 이용해 해당 숫자의 index를 찾는다.

숫자의 index의 전까지가 파일의 header 임으로  비교한다. 이때 소문자로 바꿔서 비교한다.

header가 같을 경우 숫자를 가져와서 비교한다. 이때 Number 타입 비교를 위해 Number()로 감싼 후 비교

*주의
정규식으로 숫자를 뽑았지만 이는 들어온 문자열 전체 중에 숫자이기에 tail에 있는 것도 포함될수 있다. 따라서 split('.')으로 tail 부분에 있을 숫자는 제거하고 뽑는다.(관련 테스트 케이스 3,4,5,19,20)

[ 코드 ]

function solution(files) {
  files.sort((a, b) => {
    let aNum = a.split(".")[0].replace(/[^0-9]/g, "");
    let aNumIndex = a.indexOf(aNum);
    let bNum = b.split(".")[0].replace(/[^0-9]/g, "");
    let bNumIndex = b.indexOf(bNum);

    if (a.slice(0, aNumIndex).toLowerCase() > b.slice(0, bNumIndex).toLowerCase()) {
      return 1;
    } else if (a.slice(0, aNumIndex).toLowerCase() < b.slice(0, bNumIndex).toLowerCase()) {
      return -1;
    } else {
      if (Number(aNum) >= Number(bNum)) {
        return 1;
      } else {
        return -1;
      }
    }
  });
  return files;
}

댓글