본문 바로가기

개발/알고리즘 & 자료구조

[코딩테스트][카카오] 2021 KAKAO BLIND RECRUITMENT - 신규 아이디 추천

반응형

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

 

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

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

programmers.co.kr

#include <string>
#include <vector>
// #include <iostream>

using namespace std;

string solution(string new_id) {
    string answer = "";
    string id=new_id;

    int len=id.size();

    for(int i=0;i<len;i++) {
        char c=id[i];

        if(c>=65 && c<=90) {
            c+=32;
        }

        if((c>='a' && c<='z') || (c>='0' && c<='9')
        || c=='-' || c=='_' || c=='.') {
            answer+=c;
        }
        else {
            continue;
        }
    }

    // cout<<"step1,2==> "<<answer<<endl;

    id=answer;
    answer="";
    len=id.length();

    for(int i=0;i<len;i++) {
        char c=id[i];

        if(c=='.') {
            int commaIdx=i;
            for(int j=i+1;j<len;j++) {
                if(id[j]!='.') {
                    break;
                }
                if(id[j]=='.') {
                    commaIdx=j;
                }
            }

            answer+='.';
            i=commaIdx;
        }
        else {
            answer+=c;
        }
    }
    // cout<<"step3==> "<<answer<<endl;
    
    id=answer;
    answer="";
    len=id.length();

    for(int i=0;i<len;i++) {
        char c=id[i];

        if(i==0 && c=='.') {
            continue;
        }

        if(i==len-1 && c=='.') {
            continue;
        }

        answer+=c;
    }
    // cout<<"step4==> "<<answer<<endl;

    id=answer;
    answer="";
    len=id.length();

    if(len==0) {
        answer='a';
        id=answer;
        answer="";
    }
    // cout<<"step5==> "<<" id="<<id<<" answer="<<answer<<endl;

    len=id.length();

    if(len>=16) {
        for(int i=0;i<15;i++) {
        char c=id[i];
        answer+=c;
    }
    
    id=answer;
    answer="";
    }
    // cout<<"step6==> "<<" id="<<id<<" answer="<<answer<<endl;

    len=id.length();

    if(len<=2) {
        char lastC=id[len-1];
        for(int i=0;i<3;i++) {
            if(i>=len) {
                answer+=lastC;
            }
            else {
                char c=id[i];
                answer+=c;
            }
        }
        id=answer;
        answer="";
    }
    
    len=id.length();

    for(int i=0;i<len;i++) {
        char c=id[i];

        if(i==0 && c=='.') {
            continue;
        }

        if(i==len-1 && c=='.') {
            continue;
        }

        answer+=c;
    }

    if(answer=="") {
        answer=id;
    }
    
    // cout<<"step7==> "<<" id="<<id<<" answer="<<answer<<endl;

    return answer;
}

 

문자열 처리 문제다.

C++로 문자열 처리하려니까 너무 지저분해진다..

 

문제 해결을 위해서는

순차적으로 신규 아이디 문자열에 대해

7단계에 걸쳐서 문자열을 변환 처리해주면 된다.

 

조건을 놓치지 않고 잘 처리하도록 하자.

 

p.s. 가독성을 더 개선할 수는 있지만

푸는 속도에 우선순위를 두고 빠르게 푸는 연습중이기 때문에 맞으면 패스!

반응형