[C++로 풀이] 신규 아이디 추천⭐

Date:     Updated:

카테고리:

태그:

📌 신규 아이디 추천

난이도 ⭐

🚀 문제

image

image


🚀 내 풀이 ⭕

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {

    // 1 단계
    for(int i = 0; i < new_id.length(); 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.length(); ) {
        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(new_id.begin() + i);
    }
    
    // 3 단계
    for(int i = 1; i < new_id.length(); ){
        if (new_id[i] == '.' && new_id[i - 1] == '.'){
            new_id.erase(new_id.begin() + i);
            continue;
        }
        else i++;
    }
    
    // 4 단계
    if (new_id.front() == '.') new_id.erase(new_id.begin());
    if (new_id.back() == '.') new_id.erase(new_id.end() - 1);
    
    // 5 단계
    if (new_id.length() == 0) 
        new_id = "a";
    
    // 6 단계
    if (new_id.length() >= 16){
        while(new_id.length() != 15){
            new_id.erase(new_id.begin() + 15);
        }
    }
    if (new_id.back() == '.') new_id.erase(new_id.end() - 1);
    
    // 7 단계
    if (new_id.length() <= 2){
        while(new_id.length() != 3){
            new_id += new_id.back();
        }
    }
    
    return new_id;
}

2, 3단계 for문의 i++가 중괄호 안에 있는 것 주의! (erase 하는 경우 i++되지 않게하기 위해서였다. 뒤에 있는게 한 칸 땡겨 올테니 i++ 할 필요가 없다.)



🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Programmers 카테고리 내 다른 글 보러가기

댓글 남기기