문제풀이/프로그래머스

[프로그래머스] 신규 아이디 추천 (C++ / JavaScript / Python)

Hyeon-Uk 2021. 7. 8. 22:00
반응형

https://programmers.co.kr/learn/courses/30/lessons/72410?language=javascript 

 

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

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

programmers.co.kr


 

-풀이-

문자열 함수를 이용하여 풀어주었다.

 

-시간복잡도-

문자열의 길이를 N이라고 한다면, O(N)이 된다.

 

-코드-

JavaScript코드

function solution(new_id) {
    var answer = '';
    
    //1단계
    var new_id=new_id.toLowerCase();
    
    //2단계
    var temp="";
    for(var i=0;i<new_id.length;i++){
        var ch=new_id[i];
        if((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||ch==='.'||ch==='-'||ch==='_'){
            //2단계를 하며 3단계도 같이
            if(ch==="."&&temp.length>0&&temp[temp.length-1]==='.'){
                continue;
            }
            else{
                temp+=ch;
            }
        }
    }
    new_id=temp;
    
    //4단계
    if(new_id[0]==='.'){
        new_id=new_id.substr(1,new_id.length-1);
    }
    if(new_id[new_id.length-1]==='.'){
        new_id=new_id.substr(0,new_id.length-1);
    }
    
    //5단계
    if(new_id===""){
        new_id="a";
    }
    
    //6단계
    if(new_id.length>=16){
        new_id=new_id.substr(0,15);
        if(new_id[14]==="."){
            new_id=new_id.substr(0,14);
        }
    }
    
    //7단계
    if(new_id.length<=2){
        var c=new_id[new_id.length-1];
        while(new_id.length<3){
            new_id+=c;
        }
    }
    answer=new_id;
    
    return answer;
}

 

C++코드

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
    string answer="";
    //1단계
    int len=new_id.length();
    for(int i=0;i<len;i++){
        if(new_id[i]<='Z'&&new_id[i]>='A'){
            new_id[i]=new_id[i]-'A'+'a';
        }
    }
    
    //2단계
    string temp="";
    for(int i=0;i<len;i++){
        if((new_id[i]>='0'&&new_id[i]<='9')||(new_id[i]>='a'&&new_id[i]<='z')||new_id[i]=='-'||new_id[i]=='_'||new_id[i]=='.'){
            //2단계 도중 3단계
            if(new_id[i]=='.'&&temp.size()>0&&temp[temp.size()-1]=='.'){
                continue;
            }
            temp+=new_id[i];
        }
    }
    answer=temp;
    //4단계
    if(answer[0]=='.') answer=answer.substr(1,answer.length()-1);
    if(answer[answer.length()-1]=='.') answer=answer.substr(0,answer.length()-1);
    
    //5단계
    if(answer.length()==0) answer="a";
    
    //6단계
    if(answer.length()>=16){
        answer=answer.substr(0,15);
        if(answer[answer.length()-1]=='.'){
            answer=answer.substr(0,14);
        }
    }
    
    //7단계
    if(answer.length()<=2){
        char t=answer[answer.length()-1];
        while(answer.length()<3){
            answer+=t;
        }
    }
    return answer;
}

Python 코드

def solution(new_id):
    answer = ''
    #1단계
    new_id=new_id.lower()
    
    #2단계
    new_id = ''.join(x for x in new_id if x.isalnum() or (x in "-_."))

    #3단계
    while '..' in new_id:
        new_id=new_id.replace('..','.')
    
    #4단계
    new_id= new_id[1:] if len(new_id)>1 and  new_id[0]=='.' else new_id
    new_id=new_id[:-1] if new_id[-1]=='.' else new_id
    
    #5단계
    new_id= "a" if len(new_id)==0 else new_id
    
    #6단계
    if len(new_id)>=16:
        new_id=new_id[:15]
        if new_id[-1]=='.':
            new_id=new_id[:-1]
    
    #7단계
    if len(new_id)<=2:
        while len(new_id)<3:
            new_id+=new_id[-1]
            
    answer=new_id
    return answer
반응형