[2021 카카오 코딩테스트] 신규 아이디 추천 - C++

2021. 11. 29. 05:00네카라쿠배 취준반 - 프로그래머스 문제 풀이

0. 자세한 설명은 YouTube 영상으로

 

1-1. 정규표현식을 활용하지 않는 solution

#include <iostream>
#include <cstring>
using namespace std;

string solution(string new_id) {
    string answer ="";
    // 1
    for (char &ch : new_id)
        ch = tolower(ch);

    // cout << new_id << '\n';
    // 2
    for (char ch : new_id) 
        if (isalpha(ch) || 
            isdigit(ch) || 
            strchr("-_.", ch))
            answer += ch;
    
    // 3
    int idx = -1;
    while((idx = answer.find("..")) != -1)
        answer.replace(idx, 2, ".");

    // 4
    if (answer.front() == '.') 
        answer = answer.substr(1);
    if (answer.back() == '.') 
        answer = answer.substr(0,answer.length() - 1);
        //answer.pop_back();

    // 5
    if (answer.empty()) 
        answer = "a";

    // 6
    if (answer.size() > 15) 
        answer = answer.substr(0, 15);
        if (answer.back() == '.') 
            answer.pop_back();

    // 7
    while (answer.size() < 3) 
        answer += answer.back();
    
    return answer;
}

int main(void){
    cout << solution("...!@BaT#*..y.abcdefghijklm");
    return 0;
}

 

 

 

 

 

 

 

1-2. 정규표현식을 활용한 solution

#include <iostream>
#include <regex>
using namespace std;

string solution(string new_id) {
    string answer ="";
    // 1
    for (char &ch : new_id)
        ch = tolower(ch);

    // cout << new_id << '\n';
    // 2
    answer = regex_replace(new_id, regex("[^a-z0-9\\-_.]"), "");
    
    // 3
    answer = regex_replace(answer, regex("\\.+"), ".");

    // 4
    answer = regex_replace(answer, regex("^[.]|[.]$"), "");

    // 5
    if (answer.empty()) 
        answer = "a";

    // 6
    if (answer.size() > 15){
        answer = answer.substr(0, 15);
        answer = regex_replace(answer, regex("[.]$"), "");
    }

    // 7
    while (answer.size() < 3) 
        answer += answer.back();
    
    return answer;
}

int main(void){
    cout << solution("...!@BaT#*..y.abcdefghijklm");
    return 0;
}
  • YouTube 영상에 자세한 내용을 정리했으니 참고하세요.