Algorithm/프로그래머스

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

nowkoes 2023. 8. 24. 17:46

문제 설명


제한 사항 및 입출력 예제


개념

 주어진 문자열에 대해서, 문제에서 제시한 7단계의 규칙을 순차적으로 적용하여 새로운 문자열을 생성하는 문제다. 각 단게는 특정 문자열 패턴의 변환 및 제거를 포함하며, 모든 단계를 차례대로 완료하면 최종적으로 원하는 문자열 형태를 얻을 수 있다.


풀이

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

string solution(string new_id) 
{
    string answer = "";
   
    // 1단계
    transform(new_id.begin(), new_id.end(), new_id.begin(), static_cast<int(*)(int)>(std::tolower));
    
    // 2단계
    new_id.erase(remove_if(new_id.begin(), new_id.end(), [](char ch) {
        return !(('a' <= ch && ch <= 'z') || ('0' <= ch && ch <= '9') || ch == '-' || ch == '_' || ch == '.');
    }), new_id.end());
    

    // 3단계
    for(int i = 1; i < new_id.size(); ++i)
    {
        if(new_id[i] == '.' && new_id[i - 1] == '.')
        {
            new_id.erase(i, 1);
            i--;
        }
    }
    
    // 4단계 
    if (!new_id.empty() && new_id.front() == '.')
        new_id.erase(new_id.begin());
    
    if (!new_id.empty() && new_id.back() == '.')
        new_id.erase(new_id.size() - 1);
    
     // 5단계
    if (new_id.empty())
        new_id = "a";
    
    // 6단계
    if (new_id.size() >= 16)
        new_id = new_id.substr(0, 15);
    
    if (new_id.back() == '.')
        new_id.erase(new_id.size() - 1);
    
    // 7단계
    while (new_id.size() < 3)
        new_id += new_id.back();
    
    return new_id;
}
반응형