[프로그래머스] 2021 KAKAO BLIND RECRUITMENT : 신규 아이디 추천 (C++)

김영한·2021년 8월 22일
0

알고리즘

목록 보기
63/74

문제 링크 : 신규 아이디 추천

[문제 접근]

문자열을 다루는 문제이고 주어진 조건들을 차근차근 풀어나가면 쉽게 풀 수 있는 문제이다.

[소스 코드]

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

string solution(string new_id) {
    string answer = "";
    // 1단계
    transform(new_id.begin(), new_id.end(), new_id.begin(), ::tolower);
    
    // 2단계
    string temp = "";
    for(int i=0 ; i<new_id.size() ; i++) {
        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]=='.') {
            temp += new_id[i];
        }
    }
    new_id = temp;
    
    // 3단계
    temp = "";
    bool check = false;
    for(int i=0 ; i<new_id.size() ; i++) {
        if(new_id[i]=='.') {
            if(check) continue;
            else {
                temp += new_id[i];
                check = true;
            }
        } else {
            temp += new_id[i];
            check = false;
        }
    }
    new_id = temp;
    
    // 4단계
    if(new_id[0]=='.') new_id = new_id.substr(1);
    if(new_id[new_id.size()-1]=='.') new_id = new_id.substr(0, new_id.size()-1);
    
    // 5단계
    if(new_id=="") new_id = "a";
    
    // 6단계
    if(new_id.size()>=16) {
        new_id = new_id.substr(0, 15);
        if(new_id[new_id.size()-1]=='.') new_id = new_id.substr(0, new_id.size()-1);
    }
    
    // 7단계
    while(new_id.size()<=2) {
        new_id += new_id[new_id.size()-1];
    }
    
    answer = new_id;
    
    return answer;
}

0개의 댓글