string : 카카오 2021 - 신규아이디 추천

phoenixKim·2021년 8월 27일
0

카카오 기출문제

목록 보기
3/24

몇번 풀어봄

  • 21년 10월 06일

풀이전략

string 멤버 함수 사용법에 대한 숙지

  • string의 맨 앞을 pop_front()로 접근하려고 했지만, 함수가 없다.

    맨 앞을 빼기위해서는 substr(1) 로 처리하자.

소스코드

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
    string answer = "";
    
    
    bool check = false;
    for( char& i : new_id)
    {
        i = tolower(i);
        
        //소문자가 아니면서 숫자도 아니면서, 빼기도 아니면서,
        //밑줄도 아니며서 마침표도 아니면 continue;
        //나머지는 추가
        if(  !(i >= 'a' && i <= 'z') && !(i >= '0' && i <= '9') 
          && i != '-' && i != '_' && i != '.')
        {
            continue;
        }
        
        if(i == '.')
        {           
            if(check)
            {
                continue;    
            }
            else
            {
                check = true;
            }
                  
            if(answer.empty())
            {
                continue;
            }
        }
        else
        {
            check = false;
        }
        
        answer += i;
        
    }
    
    if(answer.back() == '.')
        answer.pop_back();
    
    if(answer.empty())
    {
        answer += 'a';
    }
    
    if(answer.length() >= 16)
    {
        answer = answer.substr(0,15);
    }
    
    if(answer.back() == '.')
        answer.pop_back();
    
    if(answer.length() <= 2)
    {
        char i = answer.back();
        while(answer.length() < 3)
        {
            answer += i;
        }
    }    
    
    return answer;
}

21년 10월 06 풀이

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
    string answer = "";
    int dotCnt = 0;
    
    //1. 소문자로 바꾸자.
    for(int i = 0; i < new_id.length(); i++)
    {
        new_id[i] = tolower(new_id[i]);
        
        //2. 알파벳, 숫자 , 특수문자 처리
        if(new_id[i] == '.' || new_id[i] == '-' || new_id[i] == '_'
          || new_id[i] >= '0' && new_id[i] <= '9' || new_id[i] >= 'a' && new_id[i] <= 'z')
        {
            //3.연속된 .. 처리
            if(new_id[i] == '.')
            {
                dotCnt++;
            }
            else 
                dotCnt = 0;
            
            if(dotCnt < 2)
                answer += new_id[i];
        }
    }
    
    //4. 처음과 마지막에 dot이 있을 경우 제거한다.
    if(answer.back() == '.')
    {
        answer.pop_back();
    }
    
    //4. 처음과 마지막에 dot이 있을 경우 제거한다.
    if(answer.front() == '.')
    {
        answer = answer.substr(1);
    }
    
    //5. 빈 문자열 처리
    if(answer.empty())
    {
        answer += 'a';
    }
    
    //6. 문자열 길이 제한
    if(answer.length() >= 16)
    {
        answer = answer.substr(0, 15);
    }
    
    //6-2. 추가처리
    if(answer.back() == '.')
    {
        answer.pop_back();
    }
    
    //7. 문자열 길이 2자 이하 처리
    if(answer.length() <= 2)
    {
        char word = answer.back();
        
        while(answer.length() != 3)
            answer += word;
        
    }
    
    
    return answer;
}
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보