Algorithm

프로그래머스 - 신규 아이디 추천

b._.omi 2023. 5. 15. 19:16

 

문제

 

풀이

주어진 문제조건에서 단계별로 친절하게 설명되어 있어 단계별로 진행하였다.

1단계 : new_id 문자열을 소문자로 변환

2단계 : '-', '.', '_'을 제외한 모든 특수문자을 찾아내는 정규식으로 replaceAll을 이용해 특수문자를 제거

3단계 : 문자열에 점이 두번 연속 존재하는 ".." 문자열이 존재하지 않을 때 까지 문자열에서 ".."문자열을 "."로 변환

4단계 : 문자열의 첫 글자나 마지막 글자가 "." 특수문자일 경우 마지막 글자 제거

5단계 : 문자열 길이가 0이라면 문자열에 "a" 추가

6단계 : 문자열의 길이가 15글자를 넘는다면 15글자까지 잘라내고 마지막 글자가 "." 특수기호일 경우 마지막 글자 제거

7단계 : 문자열의 길이가 3보다 작다면 문자열의 길이가 3 이상이 될 때 까지 문자열의 마지막 글자를 문자열에 추가

function solution(new_id) {
    let secondConditionReg = /[\{\}\[\]\/?,:\)*~!^\+<>@\#$%&\=\(]/g;
    
    // 1단계
    let answer = new_id.toLowerCase();
    
    // 2단계
    answer = answer.replaceAll(secondConditionReg, "");
    
    // 3단계
    while(answer.includes('..')){
        answer = answer.replace('..', '.');
    }
    
    // 4단계
    answer = answer.replace(/^\.|\.$/g, '');
    
    // 5단계
    if(answer.length === 0) answer += 'a';
    
    // 6단계
    if(answer.length > 15) {
        answer = answer.substr(0, 15);
        answer = answer.replace(/\.$/, '');
    }
    
    // 7단계
    if(answer.length < 3){
        while(answer.length < 3) {
            answer += answer[answer.length-1];
        }
    }
    
    return answer;
}