네카라쿠배 취준반 - 프로그래머스 문제 풀이
[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;
}