ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 신규 아이디 추천 - javascript
    기타/코딩테스트 2022. 6. 13. 22:30

     

     

     

    문제

     

    1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
    2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
    3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
    4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
    5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
    6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
         만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
    7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.

     

     

     

    내 풀이

    function solution(_newId) {
        // 1
        _newId = _newId.toLowerCase();
    
        // 2
        const regex = /[^a-z|0-9|\-|_|.]/gi;
        _newId = _newId.replace(regex, '');
    
        // 3
        const regexDox = /[.]{1,}/gi;
        _newId = _newId.replace(regexDox, '.');
    
        // 4
        if (_newId.startsWith('.')) _newId = _newId.substring(1, _newId.length);
        if (_newId.endsWith('.')) _newId = _newId.substring(0, _newId.length - 1);
    
        // 5
        if (!_newId) _newId = 'a';
    
        // 6
        if (_newId.length > 15) _newId = _newId.substring(0, 15);
        if (_newId.endsWith('.')) _newId = _newId.substring(0, _newId.length - 1);
    
        // 7
        while (_newId.length <= 2) _newId += _newId[_newId.length - 1];
    
        return _newId;
    }

     

    각 단계의 조건에 맞추어 문자열을 가공

     

    이번 문제를 풀면서 startsWith와 endsWith라는 함수에 대해서 배우게 되었다.

     

    문제를 푼 후 다른 사람들의 풀이를 보면서 마지막 7단계를 빼고는 chainning과 정규표현식으로 가능한 것을 알았다.

     

    또한 6단계의 length라는 조건문을 추가해서 substring을 하지 않아도

    slice로 0~15자까지 무조건 자르는 풀이를 보고.. 머리 탁! 했다. 넘치든 말든 결과는 똑같으니까..

     

    마지막 7단계는 repeat이라는 함수로 반복할 수 있다는 것도 배움

     

     

     

    실행테스트

    const new_id = "...!@BaT#*..y.abcdefghijklm"
    
    console.log(solution(new_id)); // output => "bat.y.abcdefghi"

     

     

    댓글

Designed by Tistory.