[프로그래머스 LV.1] 2021 KAKAO BLIND RECRUITMENT 신규 아이디추천

Urther·2021년 12월 12일
0

알고리즘

목록 보기
27/41
post-thumbnail

Problem | 신규 아이디 추천


리팩토링 전

function solution(new_id) {
  var answer = "";

  // 1. 소문자 => 대문자로 변경
  if (/[A-Z]/g.test(new_id)) new_id = new_id.toLowerCase();
  // 2. 특수 문제 빼기
  new_id = new_id.replace(/[^a-z0-9-_.$]/g, "");
  // 3. 두번 이상 마침표 => . 으로 대체
  new_id = new_id.replace(/\.{2,}/g, ".");

  // 4. 마침표가 처음이나 끝에 위치한다면 제거
  new_id = new_id.replace(/^\.|| \.$/g, "");

  // 5. 빈 문자열이면 a를 대입
  new_id = new_id.replace(" ", "a");

  // 6. 16자리면 15자리만
  if (new_id.length >= 16) new_id = new_id.substring(0, 15);
  if (/\.$/.test(new_id)) new_id = new_id.substring(0, new_id.length - 1);

  if (new_id.length <= 2) {
    if (new_id.length === 0) new_id = "aaa";
    else new_id += new_id[new_id.length - 1].repeat(3 - new_id.length);
  }
  answer = new_id;
  return answer;
}

문제점과 변경사항,
매개변수로 받은 것을 계속 바꿨다. -> answer이 있음에도 왜 굳이?
if else 문 대신 , 삼항연산자 사용으로 코드를 깔끔하게 바꿨다.

리팩토링 후

function Recommend_id(new_id) {
  var answer = '';

  answer = new_id
    .replace(/[A-Z]/g, upper => upper.toLowerCase())
    .replace(/[^\w-.]/g, '')
    .replace(/\.{2,}/g, '.')
    .replace(/^\.|\.$/g, '')
    .replace(/^$/, 'a')
    .slice(0, 15)
    .replace(/\.$/g, '');

  answer.length <= 2 ? (answer += answer[answer.length - 1].repeat(3 - answer.length)) : false;

  return answer;
}

알고리즘 풀 때 정규식이 편하다는 것은 알지만,
최소한 나에게는 가독성이 너무 떨어진다. ( 정규식을 몰라서 그런 것일 수도 있겠다. ) 정규식이 가독성이 좋은지 안좋은지는 월요일 강사님한테 물어보고 추가 해야겠다.

profile
이전해요 ☘️ https://mei-zy.tistory.com

0개의 댓글