관리 메뉴

有希

프로그래머스/신규 아이디 추천 본문

프로그래밍/알고리즘+코딩테스트

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

有希. 2022. 3. 16. 02:56

꼴에 나름 발전시켜서 풀겠다고 여러 단계를 합쳐서 (예시로 1,4단계를 한꺼번에 처리한다던가...) 함수로 빼서 풀다가 자꾸만 오류가 나서 나 스스로에 대해 의심이 들고... 슬퍼했었다가

시키는 대로 해보자 했더니 됐다. 심지어 시간도 거의 차이 안났다. 시키는 대로 풀자...

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string solution(string new_id) {
    string answer = "";
    
    //step1
    for(int i=0; i<new_id.size(); ++i)
    {
        if(new_id[i] >= 'A' && new_id[i] <= 'Z')
        {
            new_id[i] = new_id[i] - 'A' + 'a';
        }
    }
    
    //step2
    string s;
    for(int i=0; i<new_id.size(); ++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] == '.')
          )
        {
            s+=new_id[i];
        }
    }
    
    //step3
    string s2;
    for(int i=0; i<s.size(); ++i)
    {
        if(s[i]=='.')
        {
            if(s2.back()=='.') continue;
            else s2+=s[i];
        }
        else
            s2+=s[i];
    }
    
    //step4
    int i=0;
    while(s2[i]=='.')
    {
        ++i;
    }
    s2 = s2.substr(i, s2.size()-i);
    while(s2.back()=='.')
    {
        s2.pop_back();
    }
    
    //step5
    if(s2.empty())
    {
        s2="a";
    }
    
    //step6
    if(s2.size() >= 16)
    {
        s2 = s2.substr(0, 15);
        while(s2.back()=='.') s2.pop_back();
    }
    
    //step7
    if(s2.size() < 3)
    {
        while(s2.size() < 3)
            s2.push_back(s2.back());
    }
    
    return s2;
}