운기의 블로그
프로그래머스 - 신규 아이디 추천 본문
기존에는 string 문자열을 하나씩 분리하는 방법으로 했다면,
이번에는 정규식에 대해서 좀 더 알게 된 기회였다.
#include<iostream>
#include <string>
#include <vector>
#include <regex>
using namespace std;
string solution(string new_id) {
string answer = "";
// 대문자 소문자로 치환
for (int i = 0; i < new_id.size(); i++) {
if (new_id[i] >= 'A' && new_id[i] <= 'Z') {
new_id[i] = new_id[i] + 32;
}
}
//소문자, 숫자, 빼기, 밑줄, 마침표, 문자를 제외한건 제거
new_id = regex_replace(new_id, regex("[^a-z0-9-_.]"), "");
//마침표가 두번 이상연속되면 하나로 변경
new_id = regex_replace(new_id, regex("[.]+"), ".");
//마침표가 처음이나 끝이면 제거
new_id = regex_replace(new_id, regex("^[.]|[.]$"), "");
//빈 문자열이면 a 대입
if (new_id.size() == 0) {
new_id = "a";
}
//16자리 이상인 문자열은 뒤에 전부제거
int end = new_id.size();
if (new_id.size() > 15) {
new_id.erase(15, end - 15);
}
//마침표가 처음이나 끝이면 제거
new_id = regex_replace(new_id, regex("^[.]|[.]$"), "");
// 2자리이하면 마지막문자를 3자리 될떄까지 반복
int len = new_id.size();
if (len < 3) {
if (len == 1) {
for (int i = len; i < 3; i++) {
new_id = new_id + new_id[0];
}
}
else {
for (int i = len; i < 3; i++) {
new_id = new_id + new_id[1];
}
}
}
answer = new_id;
return answer;
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 메뉴 리뉴얼 (0) | 2022.09.13 |
---|---|
백준 - 2096 내려가기 (0) | 2022.07.02 |
백준 - 2748번 피보나치 수 2 (0) | 2022.07.01 |
백준 - 1806 부분합 (0) | 2022.07.01 |
백준 - 2003번 수들의 합 2 (0) | 2022.06.27 |