Make Unreal REAL.
article thumbnail
Level 1. 신규 아이디 추천

 

 

디버깅이 수월하도록 각 단계를 함수로 나눴다.

 

string은 다양한 자료구조 함수를 지원하기 때문에 문자열보다는 자료구조처럼 활용했다.

 

step3()에서 unique() 함수를 저렇게 활용하면 연속된 문자를 제거할 수 있다.

 

#include <iostream>
#include <algorithm>
#include <cctype>

using namespace std;

void step1(string& s)
{
    transform(s.begin(), s.end(), s.begin(), [](char c) { return isalpha(c) ? tolower(c) : c; });
}

void step2(string& s)
{
    auto it = remove_if(s.begin(), s.end(), [](char c) { return !(isalpha(c) || isdigit(c) || c == '-' || c == '_' || c == '.'); });
    s.erase(it, s.end());
}

void step3(string& s)
{
    auto it = unique(s.begin(), s.end(), [](char a, char b) { return (a == '.') && (b == '.'); });
    s.erase(it, s.end());
}

void step4(string& s)
{
    if (!s.empty() && s[0] == '.')     s.erase(s.begin());
    if (!s.empty() && s.back() == '.') s.erase(s.end() - 1);
}

void step5(string& s)
{
    if (s == "") s = "a";
}

void step6(string& s)
{
    if (16 <= s.length())
    {
        s = s.substr(0, 15);
        step4(s);
    }
}

void step7(string& s)
{
    while (s.length() < 3)
        s += s.back();
}

string solution(string new_id)
{
    step1(new_id);
    step2(new_id);
    step3(new_id);
    step4(new_id);
    step5(new_id);
    step6(new_id);
    step7(new_id);

    return new_id;
}

 

다른 사람의 풀이를 보던 중 문자열에서 문자를 검색하는 strchr() 함수라는 것을 알게 되었다.

 

또, string에서 pop_back() 함수를 지원하기 때문에 string.erase(s.end() - 1) 대신 사용할 수 있다.

 

#include <iostream>
#include <algorithm>
#include <cctype>
#include <cstring>

using namespace std;

void step1(string& s)
{
    transform(s.begin(), s.end(), s.begin(), [](char c) { return isalpha(c) ? tolower(c) : c; });
}

void step2(string& s)
{
    auto it = remove_if(s.begin(), s.end(), [](char c) { return !(isalpha(c) || isdigit(c) || strchr("-_.", c)); });
    s.erase(it, s.end());
}

void step3(string& s)
{
    auto it = unique(s.begin(), s.end(), [](char a, char b) { return (a == '.') && (b == '.'); });
    s.erase(it, s.end());
}

void step4(string& s)
{
    if (!s.empty() && s.front() == '.') s.erase(s.begin());
    if (!s.empty() && s.back() == '.')  s.pop_back();
}

void step5(string& s)
{
    if (s.empty()) s = "a";
}

void step6(string& s)
{
    if (16 <= s.length())
    {
        s = s.substr(0, 15);
        step4(s);
    }
}

void step7(string& s)
{
    while (s.length() < 3)
        s += s.back();
}

string solution(string new_id)
{
    step1(new_id);
    step2(new_id);
    step3(new_id);
    step4(new_id);
    step5(new_id);
    step6(new_id);
    step7(new_id);

    return new_id;
}
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그