💻 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
부분만 조심해주면 전혀 문제없고 쉬운 문제였음.