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

monshell·2021년 8월 24일
0

ALGORITHM

목록 보기
8/17

문제 링크 :

문제 요약 :

  • 주어진 문자열을 주어진 규칙에 맞게 변형하여 리턴하라

풀이 흐름 :

  • 별 방법 없다. 그냥 1단계부터 7단계까지 차근차근 구현했다.

코드
사용 언어 : C++

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
	// 1, 2
	for (int i = 0; i < new_id.length(); i++){
		if ('A' <= new_id[i] && new_id[i] <= 'Z')
			new_id[i] += 32;
		else if ('a' <= new_id[i] && new_id[i] <= 'z')
			;
		else if ('0' <= new_id[i] && new_id[i] <= '9')
			;
		else if (new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.')
			;
		else{
			new_id.erase(i, 1);
			i--;
		}
	}

	// 3
	int dot_start = -1;
	for (int i = 0; i < new_id.length(); i++){
		if (new_id[i] == '.') {
			if (dot_start == -1){
				dot_start = i;
				continue;
			}
		}
		else{
			if (dot_start != -1 && dot_start + 1 < i){
				new_id.erase(dot_start, i - dot_start - 1);
				i = -1;
			}
			dot_start = -1;
		}
	}
	if (dot_start != -1)
		new_id.resize(dot_start);

	// 4
	if (new_id.length() > 0){
		if (new_id.front() == '.')
			new_id.erase(0, 1);
		if (new_id.back() == '.')
			new_id.erase(new_id.length() - 1, 1);
	}

	// 5
	if (new_id.length() == 0)
		new_id = "a";

	// 6
	if (new_id.length() >= 16){
		new_id.resize(15);
		if (new_id.back() == '.')
			new_id.erase(new_id.length() - 1, 1);
	}

	// 7
	char c = new_id.back();
	for (int i = new_id.length(); i < 3; ++i){
		new_id += c;
	}

	return new_id;
}

0개의 댓글