알고리즘/programmers

[Programmers] 신규 아이디 추천

꾸준함. 2021. 11. 7. 17:59

문제 링크입니다: https://programmers.co.kr/learn/courses/30/lessons/72410

 

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

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

programmers.co.kr

문제에서 주어진 조건대로 풀면 되는 문제였습니다.

 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool isFitForSecondRound(char c)
{
return (c >= 'a' && c <= 'z')
|| (c >= '0' && c <= '9')
|| c == '-'
|| c == '_'
|| c == '.';
}
string solution(string new_id) {
string answer = new_id;
// 1단계
for (int i = 0; i < answer.length(); i++)
{
if (answer[i] >= 'A' && answer[i] <= 'Z')
{
answer[i] += 'a' - 'A';
}
}
// 2단계
string temp;
for (int i = 0; i < answer.length(); i++)
{
if (isFitForSecondRound(answer[i]))
{
temp += answer[i];
}
}
answer = temp;
temp = "";
// 3단계
for (int i = 0; i < answer.length(); i++)
{
if (i != answer.length() - 1
&& answer[i] == '.' && answer[i + 1] == '.')
{
temp += '.';
while (i != answer.length() - 1 && answer[i + 1] == '.')
{
i++;
}
continue;
}
temp += answer[i];
}
answer = temp;
temp = "";
// 4단계
while (!answer.empty() && answer[0] == '.')
{
answer = answer.substr(1);
}
while (!answer.empty() && answer[answer.length() - 1] == '.')
{
answer = answer.substr(0, answer.length() - 1);
}
// 5단계
if (answer.empty())
{
answer = "a";
}
// 6단계
if (answer.length() >= 16)
{
answer = answer.substr(0, 15);
if (answer[answer.length() - 1] == '.')
{
answer = answer.substr(0, answer.length() - 1);
}
}
// 7단계
if (answer.length() <= 2)
{
char c = answer[answer.length() - 1];
while (answer.length() < 3)
{
answer += c;
}
}
return answer;
}
view raw .cpp hosted with ❤ by GitHub

 

 

개발환경:Visual Studio 2017

 

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형