프로그래머스 Lv.1 : 신규 아이디 추천

zeroequaltwo·2022년 12월 1일
0

코딩테스트

목록 보기
61/69

문제

프로그래머스 문제

내 풀이

function solution(new_id) {
    let id = new_id.toLowerCase();
    id = id.replace(/[\~\!\@\#\$\%\^\&\*\(\)\=\+\[\{\]\}\:\?\,\<\>\\\/]/g, "");
    id = id.replace(/\.{2,}/g, ".");
    id = id.replace(/^\.|\.$/,"");
    if(id.length === 0) id = "a";
    id = id.slice(0,15);
    id = id.replace(/^\.|\.$/,"");
    if(id.length <= 2) id = (id + id[id.length-1].repeat(3)).slice(0,3);
    return id;
}

개선점

  • 정규식 넘 외우기 힘들다.
  • .replace(/[^\w-_.]/g, '')
    -> [^~] 이렇게 쓰면 ~를 제외한다는 의미이다.
    -> 대괄호 없이 ^만 단독으로 쓰이면 문자가 ~으로 시작하는 문자라는 의미이다.
  • \w -> 영어 + 숫자 + 언더바(_)
  • /.+/ -> .이 1번이상 반복한다.
  • /^$/ -> 빈 문자열
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
나로 인해 0=2가 성립한다.

0개의 댓글