본문 바로가기

알고리즘 문제풀이

[프로그래머스] 2021 카카오 공채 - 신규 아이디 추천

오늘 푼 문제

 

1. 신규 아이디 추천 / Lv.1 / 시간 : 32분

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

 

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

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

programmers.co.kr

function solution(new_id) {
    // 1. 소문자
    new_id = new_id.toLowerCase();
    
    // 2. 특수문자 제외
    let regx = /[\(\)\=\/+\[\{\]\}~!@#$%^&*:?,<>]/g;
    new_id = new_id.replace(regx,"");
    
    // 3. 마침표 연속
    let regx2 = /\.+/g;
    new_id = new_id.replace(regx2,".");
    
    // 4. 첫끝 마침표
    new_id = new_id[0]==="."? new_id.slice(1) : new_id;
    new_id = new_id[new_id.length-1]==="."? new_id.slice(0,-1) : new_id;
    
    // 5. 빈문자열 a
    if(!new_id.length){
        new_id = "aaa";
        return new_id;
    }
    
    // 6. 16자 이상
    if(new_id.length>=16){
        new_id = new_id.slice(0,15);
        if(new_id[14]===".") new_id = new_id.slice(0,14);
        return new_id;
    }
    
    //7. 2자 이하
    if(new_id.length<=2){
        let n = new_id.length;
        while(new_id.length<3) new_id+=new_id[n-1];
    }
    
    return new_id;
}

 

 

 

다른 사람의 풀이

const solution = (new_id) => {
    const id = new_id
        .toLowerCase()
        .replace(/[^\w\d-_.]/g, '')
        .replace(/\.{2,}/g, '.')
        .replace(/^\.|\.$/g, '')
        .padEnd(1, 'a')
        .slice(0, 15)
        .replace(/^\.|\.$/g, '')        
    return id.padEnd(3, id[id.length-1])
}

 

굉장히 깔끔함. 그리고 padEnd라는 걸 알게되었다.

padEnd()
 메서드는 현재 문자열에 다른 문자열을 채워, 주어진 길이를 만족하는 새로운 문자열을 반환합니다. 채워넣기는 대상 문자열의 끝(우측)부터 적용됩니다. 현재 문자열의 길이보다 작다면 채워넣지 않고 그대로 반환.