본문 바로가기

알고리즘 문제풀이

[프로그래머스] 2018 카카오 공채 - 파일명 정렬

오늘 푼 문제

 

1. 파일명 정렬/ Lv. 2 / 시간 : 29분

programmers.co.kr/learn/courses/30/lessons/17686?language=javascript

 

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

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

programmers.co.kr

function solution(files) {
    files.sort((a,b)=>{
        let [a_head,a_num] = test(a);
        let [b_head,b_num] = test(b);
        if(a_head > b_head) return 1;
        else if(a_head < b_head) return -1;
        else return a_num-b_num;
    })
    return files;
}

function test(s){
    let regx = /[0-9]/;
    let config = false;
    let head = '';
    let num = '';
    for(let i=0;i<s.length;i++){
        if(regx.test(s[i])){
            config = true;
            num+=s[i]
        }else{
            if(config) break;
            head+=s[i];
        }
    }
    return [head.toLowerCase(), num*1];
}

 

 

추가사항

숫자가 뒤에 또 나오는 숫자에 대해 앞에서 연속된 숫자만 추출하는 법을 몰라 저렇게 문자열을 하나하나 돌면서 확인하는 식으로 작성했는데 다른 사람들의 풀이에 쓸만한 정규식이 있었음.

regx = /(\D*)([0-9]*)/i

저 정규식으로 match 를 쓸 경우 다음과 같은 배열을 뱉어준다. 

저기서 1번째 인덱스 값을 head로, 2번째 인덱스 값을 number로 추출하면 됨.