개발 공부

(프로그래머스)(자바스크립트)파일명 정렬 본문

알고리즘

(프로그래머스)(자바스크립트)파일명 정렬

아이셩짱셩 2021. 7. 9. 15:41

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

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

 

//약 130 소요
var logFlag = false;

function solution(files) {
    //숫자5개인 경우 오류나는 것 아래 테스트로 확인함
    //files = ["A-00011 Freedom Fight44er", "A-10 Superfort5ress", "A-10 Thunderbolt6II", "A-10 Tomcat"];
    
    //if(files[0] == 'img12.png'){
        logFlag = true;
        //console.log(logFlag);
    //}
    var answer = [];

    
        
    //비교를 위한 object array를 만듬
    var items = [];
    for(var i = 0 ; i < files.length; i++){

        var obj = {};
        
        //origin 설정
        obj.origin = files[i];
        
        //숫자 첫 출현위치
        var numberFirstIndex = files[i].search(/\d/);
        
        //head 설정
        obj.head = files[i].substring(0, numberFirstIndex);       //str.search(/\d/)
        
        //head 이후 부분 임시 저장
        var temp = files[i].substring(numberFirstIndex, numberFirstIndex+5);    //str.substring()
        
        //number 설정(임시) //5개 모두 숫자이면 -1임, 이를 처리해줘야함
        obj.number = temp.substring(0, temp.search(/[ \.\-A-Za-z]/) == -1 ? 5 : temp.search(/[ \.\-A-Za-z]/));  //regex
        
        //number 마지막 출현 위치
        var numberLastIndex = numberFirstIndex + obj.number.length;

        //number parseInt
        obj.number = parseInt(obj.number, 10);   //parseInt
        
        //tail 설정
        obj.tail = files[i].substring(numberLastIndex);
        
        items.push(obj);
    }

    if(logFlag){
        console.log(items);
    }
    
    // 정렬
    items.sort(function(a, b) {
        //head 비교 
        var headA = a.head.toUpperCase(); // ignore upper and lowercase
        var headB = b.head.toUpperCase(); // ignore upper and lowercase
        if (headA < headB) {
            return -1;
        }
        if (headA > headB) {
            return 1;
        }

        // head 같을 경우
        if (headA == headB){
            //number 비교
            var numberA = a.number;
            var numberB = b.number;
            if (numberA < numberB) {
                return -1;
            }
            if (numberA > numberB) {
                return 1;
            }
            return 0;
        }

    });
    
    items.forEach(obj=>{    //forEach
        
        //if(logFlag){
            //console.log(obj);
        //}
        answer.push(obj.origin);
    });

    return answer;
}
Comments