CodingTest Practice/Programmers

프로그래머스 : 신규 아이디 추천 (C++, Lv.1)

몽땅마니아(MDD) 2021. 12. 30. 18:31

https://programmers.co.kr/learn/courses/30/lessons/72410?language=cpp 

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr

 

문자열 다루기 너무 어려워서 우선 할 수 있는 최대한의 방법으로 코드를 짜봤다.

나중에 문자열 더 열심히 해서 더 줄여봐야지. 다른 사람 코드 풀이보면 엄청 간결하게 잘 짰던데...

 

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
    string answer = "";
    //1단계
    for(int i=0; i < new_id.length() ; i++) {
        if(new_id[i] >=65 && new_id[i] <=90) new_id[i] +=32;
    }
    
    //2단계 
    string str = "";
    for(int i=0; i < new_id.length() ; i++) {
        if(new_id[i] >=97 && new_id[i] <=122) {str += new_id[i]; continue;} //소문자인지
        if(isdigit(new_id[i]) != 0) {str += new_id[i]; continue;} //숫자인지
        if(new_id[i] == '-' ||new_id[i] == '_' ||new_id[i] == '.') {str += new_id[i]; continue;} //원하는 문자인지
    }
    new_id = str;
    
    //3단계
    str = "";
    for(int i=0; i < new_id.length() ; i++) {
        if(new_id[i] != '.') str += new_id[i];
        else {
            while(new_id[i] == '.' && i < new_id.length()) i++;
            if(i >= new_id.length()) str += ".";
            else str= str + "." + new_id[i];
        }
    }
    new_id = str;
    
    //4단계    자를_문자열.substr(시작인덱스, 가져갈 길이)
    if(new_id[0] == '.') new_id = new_id.substr(1,new_id.length()-1);
    if(new_id[new_id.length()-1] == '.') new_id = new_id.substr(0,new_id.length()-1);
    
    //answer = new_id;
    
    //5단계
    if(new_id == "") new_id = "a";
    
    //6단계
    if(new_id.length()>= 16) new_id = new_id.substr(0,15);
    //마지막에 .이 있는지 한번 더 검증 필요 
    if(new_id[new_id.length()-1] == '.') new_id = new_id.substr(0,new_id.length()-1);
    
    //7단계
    if(new_id.length()<3) {
        char c = new_id[new_id.length()-1];
        while(new_id.length()<3) new_id += c;
    }
    answer = new_id;
    return answer;
}