Hueestory

[2021 KAKAO BLIND] - 신규 아이디 추천 (C++) 본문

PS(중단)/programmers

[2021 KAKAO BLIND] - 신규 아이디 추천 (C++)

히명 2024. 8. 27. 15:53
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

string solution(string new_id) {
    
    // 1단계
    transform (new_id.begin(), new_id.end(), new_id.begin(), ::tolower);
    
    // 2단계
    string tmp = "";
    for (auto x : new_id){
        if (isalpha(x) || isdigit(x) || x == '-' || x == '_' || x == '.')
            tmp += x;
    }
    new_id = tmp;
    tmp = "";
    
    // 3단계
    for (auto x : new_id){
        if (x == '.' && tmp.back() == '.') continue;
        tmp += x;
    }
    new_id = tmp;
    tmp = "";
    
    // 4단계
    if (new_id.front() == '.') new_id.erase(0, 1);
    if (new_id.back() == '.') new_id.pop_back();
    
    // 5단계
    if(new_id.empty()) new_id = "a";
    
    // 6단계
    if (new_id.length() >= 16) new_id.erase(new_id.begin() + 15, new_id.end());
    if (new_id.back() == '.') new_id.pop_back();
    
    // 7단계
    while (new_id.length() < 3) new_id += new_id.back();    
    
    return new_id;
}

 

1. transform(시작 위치, 마지막 위치, 결과를 저장할 범위, 변환할 함수)

 

2. 문자열 판단 함수

isalpha : 문자열이 문자인지 아닌지

isdigit : 문자열이 숫자인지 아닌지

 

3. string str;의 경우

str.front() - 벡터의 첫 번째 요소를 반환

str.back() - 벡터의 마지막 요소를 반환

str.begin() - 벡터의 첫 번째 요소

str.end() - 벡터의 마지막 요소

str.empty() - string이 빈 문자열인지 확인

str.at(index) - index 위치의 문자 반환, 유효한 범위인지 체크

str[index] - index 위치의 문자 반환

str.size() / str.length() - string 요소의 개수를 반환


Comments