fullfish 2022. 4. 27. 02:00

아이디어

정규표현식을 쓰는것.

 

처음 코드 

function solution(new_id) {
  new_id = new_id
    .toLowerCase()
    .replace(/[^a-z0-9-_.]/g, "")
    .replace(/\.\.+/g, ".")
    .replace(/^\.|\.$/g, "");
  if (new_id === "") new_id = "a";
  if (new_id.length >= 16) new_id = new_id.slice(0, 15);
  new_id = new_id.replace(/\.$/, "");
  while (new_id.length < 3) {
    new_id += new_id[new_id.length - 1];
  }
  return new_id;
}

 

더 좋은 코드

function solution(new_id) {
    const answer = new_id // 같은 공간에 할당 안했음
        .toLowerCase() // 1
        .replace(/[^\w-_.]/g, '') 
        .replace(/\.+/g, '.') // 결과는 같지만 .하나도 서치함으로 속도면에서 안좋을듯
        .replace(/^\.|\.$/g, '') 
        .replace(/^$/, 'a')  // /^$/는 빈문자열 /^ $/는 ' '
        .slice(0, 15).replace(/\.$/, ''); // slice(0, 15)하면 15보다 짧으면 거기까지 나옴
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len);
    //anser.charAt(len -1)이나 anser[len -1]이나 같음
    //repeat()은 해당 숫자만큼 반복
}

 

padEnd 쓴 코드

const solution = (new_id) => {
    const id = new_id
        .toLowerCase()
        .replace(/[^\w\d-_.]/g, '')
        .replace(/\.{2,}/g, '.') /2회 이상 연속으로 반복되는 문자와 가능한 많이 일치
        .replace(/^\.|\.$/g, '')
        .padEnd(1, 'a')
        .slice(0, 15)
        .replace(/^\.|\.$/g, '')        
    return id.padEnd(3, id[id.length-1])
}