Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

운기의 블로그

프로그래머스 - 신규 아이디 추천 본문

알고리즘

프로그래머스 - 신규 아이디 추천

운띠야 2022. 9. 6. 18:50

기존에는 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