본문 바로가기

개발

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

문제

https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

풀이

단순 구현 문제이다

 

코드

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

string solution(string new_id) 
{
    string answer = "";

    // 1단계
    for (char& c : new_id) 
    {  
        c = tolower(c);  
    }

    // 2단계
    for(int i=0;i<new_id.length();i++)
    {
        char c=new_id[i];
        if(c=='.' || c=='_' || c=='-') continue;
        if((int)c>='a' && (int)c<='z') continue;
        if((int)c>='0' && (int)c<='9') continue;
        new_id.erase(remove(new_id.begin(), new_id.end(), c), new_id.end());
        i--;
    }

    // 3단계
    for (size_t i = 0; i < new_id.size(); ++i) 
    {
        if (new_id[i] == '.' && i + 1 < new_id.size() && new_id[i + 1] == '.') 
        {
            new_id.erase(i, 1); --i;
        }
    }

    // 4단계
    if (!new_id.empty() && new_id.front() == '.') 
    {
        new_id.erase(0, 1);
    }
    if (!new_id.empty() && new_id.back() == '.') 
    {
        new_id.pop_back();
    }

    // 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.pop_back(); }
    }

    // 7단계
    while (new_id.size() < 3) 
    {
        new_id += new_id.back();
    }

    return new_id;
}