프로그래머스 #JS - 신규 아이디 추천

SSO·2021년 12월 8일
0

프로그래머스Lv1

목록 보기
41/47

문제

https://programmers.co.kr/learn/courses/30/lessons/72410?language=javascript

풀이

// me
// 단순 문자열 메소드 사용 테스트인데, 기본적인 내용을 너무 많이 까먹음..! 정규식!!, 메소드의 return값(새로운 문자열) 

function solution(new_id) {
    let answer = '';
    
    // step1
    answer = new_id.toLowerCase();
    console.log( "1", answer);
    
    // step2 - escape 정규식 조건 오래..
    const regex = /[~!@#$%^&*()=+[{\]}:?,<>\/]/gm;
    answer = answer.replace(regex, '');
    console.log( "2", answer);
    
    // step3 - 연속숫자 정규식..! replace는 새 문자열 반환 - 막힘.. if문에 else빼먹음..
    let newStr = answer[0];
    for(let i=0; i<answer.length-1; i++){
       if (answer[i] === '.'){
           if(answer[i+1] === answer[i]){
               newStr = newStr + '';
           } else {
                    newStr = newStr + answer[i+1]
           }
       } else {
        newStr = newStr + answer[i+1]
       }
    }
    console.log("3", newStr);
    
    
    // step4
    if(newStr[0] === '.') {
        newStr = newStr.substring(1);
    }
    if(newStr[newStr.length-1] === '.'){
        newStr = newStr.substring(0, newStr.length-1);
    }
    console.log("4", newStr);
    
    // step5
    if (newStr.length === 0) {
        newStr = 'a';
    }
    console.log("5", newStr);
    
    // step6
    if (newStr.length >= 16) {
        newStr = newStr.substring(0, 15);
    }

    if (newStr[newStr.length-1] === '.'){ // 반복 필요? -> 이전에 연속 삭제해서 반복 불필요
        newStr = newStr.substring(0, newStr.length-1);
    }
    console.log("6", newStr);
  
    // step7 - 간단한것 같은데 왜?
    if(newStr.length <=2){
        const repeatStr = newStr[newStr.length-1];
        while(newStr.length !== 3){
            newStr = newStr + repeatStr;
        }
    }
    console.log("7", newStr);
    
    return newStr;
}
// best
// 간.결. 정규식!!!!
function solution(new_id) {
    const answer = new_id
        .toLowerCase() // 1
        .replace(/[^\w-_.]/g, '') // 2
        .replace(/\.+/g, '.') // 3
        .replace(/^\.|\.$/g, '') // 4
        .replace(/^$/, 'a') // 5
        .slice(0, 15).replace(/\.$/, ''); // 6
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
}
profile
happy

0개의 댓글