코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

정규표현식은 배워놔도 안쓰다보면 자꾸 까먹게된다. 같은걸로 몇번을 검색해보는건지..

아래는 내가 짠 코드

function solution(new_id) {

  new_id = new_id.toLowerCase();
  new_id = new_id.replace(/[^a-zA-Z0-9._-]/gi, "")
  new_id = new_id.replace(/\.{2,}/g, ".")
  if (new_id.match(/\.$/g)) {
    new_id = new_id.slice(0,-1);
  }
  if (new_id.match(/^\./g)) {
    new_id = new_id.slice(1);
  }
  if (!new_id) {
    new_id = "a"
  }
  if (new_id.length >= 16) {
    new_id = new_id.slice(0, 15)
    if (new_id.match(/\.$/g)) {
      new_id = new_id.slice(0,-1);
    }
  } else if (2 >= new_id.length) {
    for (let i = 0; (3 - new_id.length) >= i; i++) {
      new_id = new_id.concat(new_id[new_id.length-1])
    }
  }

  console.log(new_id)
  return new_id;
}

console.log(solution("...!@BaT#*..y.abcdefghijklm"))
console.log(solution("z-+.^."))
console.log(solution("=.="))
console.log(solution("123_.def"))
console.log(solution("abcdefghijklmn.p"))

테스트 통과를 받고나서 알게된 효율적인 코드

function solution(new_id) {
    const answer = new_id
        .toLowerCase()
        .replace(/[^\w-_.]/g, '') // 2
        .replace(/\.+/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);
}

코드가 3배 이상 줄어든다..
풀긴 풀었는데 상당히 비효율적으로 푼거같다.

소요시간은 약 2시간 (중간에 딴짓하느라 시간 많이 까먹었다.)