본문 바로가기

주5일알고리즘

Programmers: 신규 아이디 추천 with JS

<내 풀이> 못풀었다.

function solution(new_id) {
    var answer = '';
    
    var step1 = new_id.toLowerCase();
    var step2 = step1.match(/\w\-\.\d\_/);
    var step3 = step2.replace(/\..+/g,'.');
    var step4 = step3.replace(/\.,'').replace(/.\s*$/,'');
    var step5 = if(step4===''){
        return 'a'
    }else{
        return step4;
    }
    
    var step6 = if(step5.length >= 16){
        return step5.slice(0,15).replace(/.\s*$/,'');
    }else{
        return step5;
    }
    
    var step7 = if(step6.length <= 2) {
        var last = step6.slice(-1);
        while(step6.length==3){
            step6 += last;
        }
        return step6 
        }else{
            return step6 
        }
    
    answer = step7
                             
    return answer;
}

 

<정답>

function solution(new_id) {    
    const answer = new_id
        .toLowerCase()
        .replace(/[^\w-_.]/g, '')
        .replace(/\.{2,}/g, '.')
        .replace(/^\.|\.$/g, '')
        .replace(/^$/, 'a')
        .slice(0, 15).replace(/\.$/, '');
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}

 

정규식 어렵다.

 

//아이디는 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.) 문자만 사용할 수 있습니다
replace(/[^\w-.]/g, '') // [] 조건연결, ^ ~가 아닌 것, \w 알파벳 숫자 언더스코어(_), / 패턴 연결, g 모두 선택 

//마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
replace(/\.{2,}/g, '.') // \.{2,} .이 2번 이상

//마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
replace(/^\.|\.$/g, '') // ^\. .으로 시작,  | 또는, \.$ 끝에 .이 온다

//빈 문자열이라면, new_id에 "a"를 대입합니다.
replace(/^$/, 'a') // ^$ 공백

//길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
//만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
slice(0, 15).replace(/\.$/, '');