[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;
}
'네카라쿠배 취준반 - 프로그래머스 문제 풀이' 카테고리의 다른 글
[프로그래머스] 프린터 문제 풀이(스택/큐 Lv.2) - C++ (0) | 2021.12.06 |
---|---|
[프로그래머스] 프린터 문제 풀이(스택/큐 Lv.2) - java 자바 (0) | 2021.12.01 |
[2021 카카오 코딩테스트] 신규 아이디 추천(문자열, String Lv. 1) - java 자바 (0) | 2021.11.24 |
[2021 카카오 코딩테스트] 신규 아이디 추천 - 파이썬 (0) | 2021.11.22 |
[프로그래머스] 소수 찾기 (완전탐색 Lv. 2) - 파이썬 Python (0) | 2021.10.01 |