티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/72410

 

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

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

programmers.co.kr

해결 방법

1. 단계별로 알맞은 메소드와 정규표현식 사용

 

 

 

풀이

function solution(new_id) {
    var answer = new_id
              .toLowerCase() //1
              .replace(/[^a-z0-9-._]/g, '') //2
              .replace(/\.+(?=\.)/g,'') //3
              .replace(/^\.|\.$/g, '') //4
              .replace(/^$/g, 'a'); //5
    
    if (answer.length >= 16){
        answer = answer.substr(0,15).replace(/\.$/g, '');  //6
    }  

    if (answer.length <= 2){
        while (answer.length < 3){
        answer = answer.concat(answer[answer.length-1]);  //7
        }
    }
    return answer;
}

 

배운 점

 

1. 정규표현식

- [A-Za-z0-9_] (영문자, 숫자, 언더바)는 \w와 같다, 따라서 2번째는 .replace(/[^\w-.]/g, '') 도 가능하다

- 3번째는 연속된 점들을 맨 마지막 하나의 점을 제외하고 빈 문자 처리하는 것으로 .replace(/\.+/g, '.') 도 가능하다

- [^문자]는 괄호안의 문자를 제외한 것, ^문자는 특정 문자열로 시작하는 것

- 문자$는 특정 문자열로 끝나는 것

- | 는 or를 말한다

 

참고 : https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-%EC%A0%95%EA%B7%9C%EC%8B%9D-RegExp-%EB%88%84%EA%B5%AC%EB%82%98-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC

 

[JS] 📚 정규식 (RegExp) - 누구나 이해하기 쉽게 정리

정규표현식(Regular Expression) 정규표현식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용합니다. - 각각 다른 포맷으로 저장된 엄청나게 많은 전화번호 데이터를 추출

inpa.tistory.com

 

 

2.  substr, substring, slice의 차이

- substr은 시작 인덱스부터 원하는 길이만큼 문자열을 잘라서 반환 

- substring은 시작 인덱스와 마지막 인덱스-1까지 문자열을 잘라서 반환

- slice와 substring은 사용법이 같다

 

substr(여기서부터, 몇 개)
substring(여기서부터, 여기-1까지)

slice(여기서부터, 여기-1까지)

 

 

3. padEnd 메소드

마지막 7번을 나는 while문을 사용해 길이가 3이 될 때까지 마지막 문자를 추가하는 것으로 하였으나,

다른 사람의 풀이를 보며 padEnd라는 메소드를 알게 되었다

따라서 .padEnd(3, answer[answer.length-1]) 도 가능하다

 

padEnd(목표하는 문자열 길이, 추가할 문자)

목표 문자열의 길이가 될 때까지 오른쪽에 해당 문자를 더한 문자열을 리턴한다

목표 문자열의 길이보다 이미 문자열의 길이가 길면 채우지 않고 그냥 리턴한다

 

댓글