프로그래머스 LEVEL 2(파일명 정렬)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2022-09-05

  • 해결 방법 :

    • files를 돌며 각 파일에 대한 HEAD, NUMBER, TAIL을 분리하여 splitArray에 push()
    • splitArray를 1. HEAD 오름차순, 2. NUMBER 오름차순 순으로 정렬
    • splitArray를 돌며 answer에 HEAD, NUMBER, TAIL push()
  • 회고 : 처음에 number, tail index만 저장했는데 정렬할 때 참조하기 어려워서 HEAD, NUMBER, TAIL 각 string을 저장

  • 코드

    function solution(files) {
        const answer = [];
        const splitArray = [];
        for (const file of files) {
            const numberIndex = file.search(/[0-9]/);
            const head = file.substring(0, numberIndex);
            const afterHead = file.substring(numberIndex);
            const tailIndex = afterHead.search(/[^0-9]/);
            const number = tailIndex > -1 ? afterHead.substring(0, tailIndex) : afterHead;
            const tail = tailIndex > -1 ? afterHead.substring(tailIndex) : '';
            splitArray.push({'HEAD': head, 'NUMBER': number, 'TAIL': tail});
        }
        splitArray.sort((a, b) => {
            if (a.HEAD.toLowerCase() < b.HEAD.toLowerCase()) return -1;
            else if (a.HEAD.toLowerCase() > b.HEAD.toLowerCase()) return 1;
            else {
                if (Number(a.NUMBER) < Number(b.NUMBER)) return -1;
                else if (Number(a.NUMBER) > Number(b.NUMBER)) return 1;
                else return 0;
            };
        });
        for (const element of splitArray) {
            answer.push(element.HEAD + element.NUMBER + element.TAIL);
        }
        return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges