[C_C++]코딩테스트 연습/[프로그래머스] level 1

[C++] 프로그래머스 - 신규 아이디 추천

코딩굼벵이 2021. 7. 13. 18:38
728x90

 

내 풀이

 

ㅠㅠ for문 돌릴 때 증감자 없애고 안에서 쓸 수 있는걸 몰라서 엄청 삽질했다...

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
	//1단계 대문자 -> 소문자
	for (int i = 0; i < new_id.size(); i++) {
		if (new_id[i] >= 'A' && new_id[i] <= 'Z')
			new_id[i] = tolower(new_id[i]);
	}
	//2단계 소문자, 숫자, -, _, . 제외 제거
	for (int i = 0; i < new_id.size(); ) {
		if ((new_id[i] >= 'a' && new_id[i] <= 'z') || (new_id[i] >= '0' && new_id[i] <= '9') || new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.') {
			i++;
			continue;
		}
		new_id.erase(i,1);
	}
	//3단계 ..이 연속 두개면 . 하나로 만들기
	for (int i = 1; i < new_id.size(); ) {
		if (new_id[i - 1] == '.' && new_id[i] == '.') new_id.erase(i, 1);
		else i++;
	}
	//4단계 .이 처음이나 끝에 있으면 제거
	if (new_id[0] == '.') new_id.erase(0, 1);
	if (new_id.back() == '.') new_id.erase(new_id.size()-1, 1);
	//5단계 new_id가 빈 문자열이면 'a' 대입
	if (new_id.size() == 0) new_id.push_back('a');
	//6단계 길이 16자 이상이면 15개 뒤에거 제거
	if (new_id.size() >= 16) new_id.erase(15, new_id.size() - 15);
	if (new_id.back() == '.') new_id.erase(new_id.size() - 1, 1);
	//7단계 길이가 2자 이하면 마지막 문자를 new_id 길이 3 될때까지 반복
	if (new_id.size() == 1) {
		//new_id.back();
		new_id.push_back(new_id.back());
		new_id.push_back(new_id.back());
	}
	if (new_id.size() == 2) new_id.push_back(new_id.back());
    
    return new_id;
}