본문 바로가기

Algorithm/문제풀이

Programmers - 신규 아이디 추천 / Javascript

 

function solution(new_id) {
    let string = '';
    //소문자변환
    string = new_id.toLowerCase()
    //알파벳 소문자, 빼기, 밑줄, 마침표 제외하고 제거 
        .replace(/[^a-z0-9\.\-\_]/gi,'')
    //마침표가 2번 이상 연속된 경우 하나의 마침표로 치환
        .replace(/\.+/g,'.')
    //마침표가 처음이나 끝에 위치한다면 제거
        .replace(/^\.+|\.+$/g,'');
    //빈 문자열이라면 'a'를 대입하고 아니라면 15자까지만 자르기
    string = string? string.substr(0, 15) : 'a';
    //끝에 위치한 마침표 제거 
    string = string.replace(/\.+$/g,'');
    //글자수가 2이하인 경우 마지막 문자만 전체 글자수가 3이상이 될때까지 반복해서 끝에 붙이기
    while(string.length <= 2) {
        string = string + string.substr(string.length-1);
    }

    return string;
}

문자열안에서 특정 문자에 대한 치환이나 제거는 확실히 정규식이 간단한 것 같아 정규식으로 풀어보았다. 

 

나도 정규식에는 익숙하지가 않아서 어설픈 부분이 있긴 한데, 다른 분들의 풀이를 보면 .replace(/[^a-z0-9\.\-\_]/gi,'') 이부분을 .replace(/[^\w-_.]/g, '')로 쓸수 있다. \w[A-Za-z0-9_]와 대응된다.

 

또 string.length < 2 인경우에는 반복문을 쓰지 않고 answer.charAt(string.length - 1).repeat(3 - string.length)로 쓸수 있다.