프로그래머스 - 파일명 정렬

이윤주·2022년 6월 7일
0

코딩테스트

목록 보기
15/18

정규표현식 안쓰고 어떻게 할지 끙끙대다가 결국 썼다..

  1. head, number, tail을 나눈다
  • head : 숫자가 아닌 문자로 이루어져 있음
  • number : 숫자 최대 5글자 사이
  • tail : 나머지 부분
{head: foo, number: 9, tail: .txt}
  1. 파일명 정렬
  • 파일명은 우선 HEAD 부분을 기준으로 사전 순으로 정렬한다(대소문자 구별 x)
  • head부분이 같을 경우 number끼리 구분한다 (오름차순)
  • head, number 둘다 같으면 순서를 유지한다

function solution(files) {
    let arr = []
    const pattern = /(\D+)(\d{1,5})/; // 문자열만 , 1 ~ 5 길이의 숫자

    files.forEach((curr, index) => {
        const sliceStr = pattern.exec(curr);
        const head = sliceStr[1].toLowerCase();
        const number = sliceStr[2];
        const tail = curr.slice(sliceStr[0].length)
        arr.push({head, number, tail, index})
    })
    
  
    arr.sort((a, b) => {
        if(a.head === b.head && a.number === b.number) { 
        // 원래 입력에 주어진 순서를 유지
            return 0
        }
        if(a.head === b.head) { 
            // number 만 비교
            return a.number - b.number  // 오름차순
        } 
        return a.head > b.head ? 1 : -1
    })
    
    return arr.map((curr) => {return files[curr.index]})
}

0개의 댓글

관련 채용 정보