[C++]프로그래머스 신규 아이디 추천

less than 1 minute read

문제는 다음과 같다.

오늘은 프로그래머스 신규 아이디 추천 문제를 풀어보도록 하자. Level 1 문제로 그냥 구현만 하면 되는 문제였다. 다만, string에 관한 개념은 갖추고 있어야 한다. string의 함수 중 erase, front(), back() 등 강력한 함수들을 사용하면 편해진다는 것을 알게해주는 문제 같다.

                                     [코드]
#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
    string answer="";
    //1단계
    int new_id_len = new_id.length();
    for(int i=0;i<new_id_len;i++){
        if(new_id[i]>='A' && new_id[i]<='Z'){
            new_id[i] += 32;
        }
    }
    //2단계
    for(int i=0;i<new_id_len;i++){
        if((new_id[i]>='a'&& new_id[i]<='z')||(new_id[i]>='0' && new_id[i]<='9')||
          (new_id[i] == '-' || new_id[i] == '_'|| new_id[i] == '.')){
            answer += new_id[i];
        }
    }
    //3단계
    int answer_len = answer.length();
    for(int i=1;i<answer_len;){
        if(answer[i] == '.' && answer[i-1]== '.'){
            answer.erase(answer.begin()+i);
            continue;
        }
        i++;
    }
    //4단계
    if(answer.front() == '.'){
       answer.erase(answer.begin());
    }
    if(answer.back() == '.'){
        answer.erase(answer.end()-1);
    }
    //5단계
    if(answer.empty()){
        answer += 'a';
    }
    //6단계
    if(answer.length() >= 16){
        answer.resize(15);
        if(answer.back() == '.'){
            answer.erase(answer.end()-1);
        }
    }
    //7단계
    while(answer.length() <= 2){
        answer += answer[answer.length()-1];
    }
    return answer;
}