N

(프로그래머스 c++ KAKAO)신규 아이디 추천 본문

프로그래머스 알고리즘/KAKAO

(프로그래머스 c++ KAKAO)신규 아이디 추천

naeunchan 2021. 2. 19. 21:08
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/72410

 

 

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

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

programmers.co.kr

 

 

지문에 나와있는 것처럼 순서대로 하면 된다.

 

1. transform()을 이용해 소문자로 바꾸기.

2. for문을 이용해 알파벳, 숫자, '.', '-', '_'을 제외한 문자 제거.

3. 이중 for문으로 연속된 점 하나로 통합.

4. 맨 앞과 맨 뒤에 온점 제거.

5. 4번까지의 결과가 비어있다면 'a'로 만들기.

6. 지금까지의 결과가 16자 이상이면 앞에서부터 15자까지 자른 후 맨 뒤의 온점이 있다면 제거.

7. 6번까지의 결과가 2글자 이하라면 3글자가 될 때까지 맨 뒤의 글자 붙이기.

#include <string>
#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

string solution(string new_id) {
    string answer = "";
    string tmp = "";
    
    //1단계
    transform(new_id.begin(), new_id.end(), new_id.begin(), ::tolower);

    //2단계
    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] == '.' ){
            answer += new_id[i];
        }
    }

    //3단계
    for(int i = 0; i < answer.size(); i++){
        if(answer[i] == '.'){
            int cnt = 0;
            
            for(int j = i + 1; j < answer.size(); j++){
                if(answer[j] == '.'){
                    cnt++;
                }
                else{
                    break;
                }
            }
            
            if(cnt > 0){
                tmp += '.';
                i += cnt;
            }
            else{
                tmp += answer[i];
            }
        }
        else{
            tmp += answer[i];
        }
    }

    //4단계
    if(tmp.front() == '.'){
        tmp.erase(tmp.begin());
    }
    if(tmp.back() == '.'){
        tmp.pop_back();
    }

    //5단계
    if(tmp.empty()){
        tmp = "a";
    }

    //6단계
    if(tmp.size() >= 16){
        tmp = tmp.substr(0, 15);
    }
    if(tmp.back() == '.'){
        tmp.pop_back();
    }

    //7단계
    while(tmp.size() <= 2){
        tmp.push_back(tmp.back());
    }
    
    return tmp;
}
728x90
반응형