[프로그래머스] 코딩테스트연습 > 신규아이디 추천
알고리즘/javascript

[프로그래머스] 코딩테스트연습 > 신규아이디 추천

 

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

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

programmers.co.kr

 

function solution(new_id) {
    let answer = new_id
    .toLowerCase()  // 1. 대문자 => 소문자
    .replace(/[^a-z0-9-_.]/g, "")  // 2. 형식x 문자 제거
    .replace(/\.+/g, ".") // 3. 마침표 2개 이상 => 1개
    .replace(/^\.|\.$/g, "") // 4. 처음이나 마지막 마침표 제거
    
    // 5. 빈문자열 => 'a'
    if(answer === ''){
        answer = 'a'
    }
    answer = answer.slice(0,15).replace(/\.$/, "")  // 6. 15개 제한 if 15번째 = 마침표 => 제거
    
    // 7. 2자 이하 => 마지막 문자 추가해서 3 만들어줌
    while(answer.length < 3 ){
        answer += answer[answer.length - 1]
    }
    return answer             
}

 

2단계:

  • []: []안에 있는 정규표현식과 일치하면
  • ^: 제외하고 → [^a-z0-9-_.] : a-z , 0-9, -, _ , 를 제외하고
  • /g: 전체

3단계:

  • \.+ : 마침표가 1개이상이면

4단계:

  • [] 밖에서 ^ : 첫번째 → \. : 첫번째가 마침표
  • | : or
  • $: 마지막 → \.$: 마지막이 마침표

 

5번에서 체이닝이 끊겼는데 안 끊고 구현할 수도 있었다... 생각을 못했다.... 아래 코드는 다른 분의 코드!

function solution(new_id) {
    const answer = new_id
        .toLowerCase() // 1단계
        .replace(/[^\w-_.]/g, '') // 2단계
        .replace(/\.+/g, '.') // 3단계
        .replace(/^\.|\.$/g, '') // 4단계
        .replace(/^$/, 'a') // 5단계
        // .padEnd(1, 'a') // 5단계 다른 방법
        .slice(0, 15).replace(/\.$/, ''); // 6단계
    const len = answer.length;
    return len > 2 ? answer : answer + answer.charAt(len - 1).repeat(3 - len); // 7단계
}

2단계:

  • /w : [^A-Za-z0-9_]
  • 위 풀이에서는  [^\w-_.] 으로 풀었는데 _ 는 /w 에 이미 포함되어 있으므로 [^/w-.] 로 작성해도 충분

5단계 다른 방법:

  • ^$: 아무것도 없음

5단계 체이닝을 아무것도 없으면 'a' 로 치환하는 정규식 방법을 보고 오... 했는데 .padEnd 라는 방법은 아예 처음봤다.

  • padEnd( targetLength [, padString] ) : 현재 string의  length가 targetLength보다 작으면 그대로 return, 크면 padString을 뒤부터 채워서 return
    • 그래서 answer이 빈 문자열일 때 padEnd(1, 'a') 를 쓰면 length가 1보다 작기 때문에 'a' 로 채운다.
  • padStart( targetLength [, padString] ) : padEnd 와 같은 매커니즘인데 앞에서부터.

 

정규식은 항상 문제가 닥칠 때마다 구글링해서 작업하고 있는데, 언제 한 번 공부해서 자주 쓰는 부분은 외워놓으면 좋을 것 같다.

 

<MDN 정규식 링크>

 

정규 표현식 - JavaScript | MDN

정규 표현식은 문자열에 나타는 특정 문자 조합과 대응시키기 위해 사용되는 패턴입니다. 자바스크립트에서, 정규 표현식 또한 객체입니다.  이 패턴들은 RegExp의 exec 메소드와 test 메소드  ,

developer.mozilla.org

 

반응형