프로그래머스 Lv.1 코딩테스트

[프로그래머스 Lv.1] 신규 아이디 추천

하다블 2022. 2. 17. 18:27
반응형

문제는 다음과 같습니다.

코딩테스트 연습 - 신규 아이디 추천 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr

 

풀이 코드는 다음과 같습니다.

#include <string>
#include <vector>

using namespace std;

string solution(string new_id)
{

    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]);
        }
    }

    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);
    }
    
    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++;
    }

    if (new_id.front() == '.')
    {
        new_id.erase(new_id.begin());
    }
    if (new_id.back() == '.') 
    {
        new_id.erase(new_id.end() - 1);
    }
    
    if (new_id.length() == 0) 
    {
        new_id = "a";
    }
    
    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);
    }
    
    if (new_id.length() <= 2)
    {
        while(new_id.length() != 3)
        {
            new_id += new_id.back();
        }
    }
    
    return new_id;
}

코드가 길어보이지만 이 문제의 핵심은 단순하지만 길이가 긴 코드를 틀리지 않고 한 번에 작성하는 것이라고 생각합니다.

주어진 조건에 단계별 설명이 있기 때문에 한 단계씩 프로그래밍한다면 어렵지 않게 해결하실 수 있을 겁니다.

 

반응형