akjfal

[Programmers] 신규 아이디 추천 본문

알고리즘/programmers

[Programmers] 신규 아이디 추천

akjfal 2021. 7. 3. 18:49
// upper -> lower
// regex a-z, 0-9, -, _, .
// replace .. .
// charAt(0), charAt(-1) . 제거
// 빈문자열 -> a
// len > 16 -> sub(0, 15) -> 마침표 다시 체크
// len <= 2, charAt(len-1)을 len == 3까지 반복

function solution(new_id) {
    var answer = '';
    new_id = new_id.toLowerCase();
    new_id = new_id.replace(/[^a-z0-9-_.]/g, "");
    let length = new_id.length;
    do{
        length = new_id.length;
        new_id = new_id.replace("..", ".");
    }while(length != new_id.length)
    // console.log(new_id);
    new_id = trimDot(new_id);
    if(new_id === ""){
        new_id = "a";
    }
    if(new_id.length > 15){
        new_id = new_id.substring(0, 15);
        new_id = trimDot(new_id);
    }
    if(new_id.length < 3){
        while(new_id.length < 3){
            new_id += new_id.charAt(new_id.length-1);
        }
    }
    return new_id;
}

function trimDot(new_id){
    let length = new_id.length;
    if(new_id.charAt(0) === "."){
        new_id = new_id.substring(1, length);
        length = new_id.length;
    }
    if(new_id.charAt(length-1) === "."){
        new_id = new_id.substring(0, length-1);
    }
    return new_id;
}

정규식을 연습하기 정말 좋은 문제라고 생각한다.

깔끔하게 짠 코드를 통해 각종 정규식들을 새로 배우고 잊고있던 개념들을 다시금 공부했다.

1. \.이아닌 . 을 사용하면 개행문자를 제외한 모든 단일 문자가 적용된다. \.을 사용해야한다.

2. /g는 모든 문자 /i는 대소문자 구분없음이다.

3. +는 0개이상 연속된 개념이다.

4. ^는 시작 $는 끝이다. 즉 ^$를 하면 중간에 아무문자도 없다는 뜻이 된다.

5. repeat를 통해 문자열 반복추가가 가능하다.

'알고리즘 > programmers' 카테고리의 다른 글

[Programmers]다트게임  (0) 2021.07.04
[Programmers]비밀지도  (0) 2021.07.04
[Programmers] [3차] n진수 게임  (0) 2021.07.03
[Programmers] 짝지어 제거하기  (0) 2021.06.24
[Programmers] 올바른 괄호  (0) 2021.06.24
Comments