Programmers_신규 아이디 추천

한상현·2021년 5월 10일
0

Algorithm

목록 보기
10/33

💻 Programmers_신규 아이디 추천

  • 2021 KAKAO BLIND RECRUITMENT
  • 구현문제로 하라는대로만 풀면 됨.
  • 카카오는 이러한 문자열 문제가 많이 나오므로 이러한 문제들을 풀어줌이 좋음.
  • 신경써야 할 부분은 erase함수를 사용할 때, size가 줄어듬에 따라 for문의 i가 그대로인 부분을 신경써줘야 함.
#include <string>
#include <vector>

using namespace std;

string solution(string new_id)
{
    string answer = "";
    for (int i = 0; i < new_id.size(); i++)
    {
        if (new_id[i] >= 'A' && new_id[i] <= 'Z')
            new_id[i] = tolower(new_id[i]);
    }
    for (int i = 0; i < new_id.size();)
    {
        char c = new_id[i];
        if ((c >= 'a' && c <= 'z') || c == '.' || c == '_' || c == '-' || (c >= '0' && c <= '9'))
        {
            i++;
            continue;
        }
        new_id.erase(new_id.begin() + i);
    }

    for (int i = 0; i < new_id.size() - 1;)
    {
        if (new_id[i] == '.' && new_id[i + 1] == '.')
            new_id.erase(new_id.begin() + i);
        else
            i++;
    }

    if (new_id[0] == '.')
        new_id.erase(new_id.begin());

    if (new_id[new_id.size() - 1] == '.')
        new_id.erase(new_id.begin() + new_id.size() - 1);

    if (new_id.size() == 0)
        new_id.push_back('a');

    if (new_id.size() >= 16)
        new_id = new_id.substr(0, 15);

    if (new_id[new_id.size() - 1] == '.')
        new_id.erase(new_id.begin() + new_id.size() - 1);

    while (new_id.size() <= 2)
        new_id.push_back(new_id[new_id.size() - 1]);

    answer = new_id;

    return answer;
}

erase 부분만 조심해주면 전혀 문제없고 쉬운 문제였음.

profile
의 공부 노트.

0개의 댓글