programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
- 1단계 ~ 7단계에 따라 String을 조작하면 되는 문제라고 이해하고 해결하였다.
- 중간에 이해를 잘 못하거나 다 읽지 않으면 틀릴 수 있다.
더보기
#include <string>
#include <vector>
#define debug_m 1
using namespace std;
string solution(string new_id)
{
string answer = "";
/*
* // step 1
a = 97
z = 122
A = 65
Z = 90
*/
int new_idLen = new_id.length();
for (int idx = 0; idx < new_idLen; idx++)
{
if (65 <= new_id[idx] && 90 >= new_id[idx])
{
new_id[idx] += 32;
}
}
#if debug_m
printf("1: %s\n", new_id.c_str());
#endif
// step 2
/*
* 0 = 48
* 9 = 57
*/
new_idLen = new_id.length();
string buff;
for (int idx = 0; idx < new_idLen; idx++)
{
if ((97 <= new_id[idx] && 122 >= new_id[idx]) ||
(48 <= new_id[idx] && 57 >= new_id[idx]) ||
('-' == new_id[idx] || '_' == new_id[idx] || '.' == new_id[idx]))
{
buff += new_id[idx];
}
}
new_id = buff;
#if debug_m
printf("2: %s\n", new_id.c_str());
#endif
// step 3
while (true)
{
bool bBreak = true;
bool combo = false;
string::iterator iter = new_id.begin();
for (; iter != new_id.end(); )
{
if(true == combo && '.' == *iter)
{
bBreak = false;
combo = false;
iter = new_id.erase(iter);
break;
}
else if ('.' == *iter)
{
combo = true;
++iter;
}
else
{
combo = false;
++iter;
}
}
if (true == bBreak)
break;
}
#if debug_m
printf("3: %s\n", new_id.c_str());
#endif
// step 4
while (true)
{
bool bDel = false;
new_idLen = new_id.length();
if (0 < new_idLen)
{
if ('.' == new_id[0])
{
bDel = true;
new_id = new_id.substr(1, new_idLen);
}
else if ('.' == new_id[new_idLen - 1])
{
bDel = true;
new_id.pop_back();
}
}
if (false == bDel)
break;
}
#if debug_m
printf("4: %s\n", new_id.c_str());
#endif
// step 5
if (true == new_id.empty())
new_id += 'a';
#if debug_m
printf("5: %s\n", new_id.c_str());
#endif
// step 6
if (16 <= new_id.length())
{
new_id = new_id.substr(0, 15);
if ('.' == new_id.back())
new_id.pop_back();
}
#if debug_m
printf("6: %s[%d]\n", new_id.c_str(), new_id.length());
#endif
// step 7
if(2 >= new_id.length())
{
char lastCh = new_id.back();
while (true)
{
if (3 <= new_id.length())
break;
else
new_id.push_back(lastCh);
}
}
#if debug_m
printf("7: %s\n", new_id.c_str());
#endif
answer = new_id;
#if debug_m
printf("ans: %s\n", answer.c_str());
#endif
return answer;
}
int main()
{
string str = "...!@BaT#*..y.abcdefghijklm";
solution(str);
return 0;
}
'Coding Problem > 프로그래머스' 카테고리의 다른 글
[프로그래머스/LV1] - 모의고사 (0) | 2021.04.24 |
---|---|
[프로그래머스/Lv1] - 완주하지 못한 선수 (0) | 2021.04.24 |
[프로그래머스/Lv1/카카오] - 크레인 인형뽑기 (0) | 2021.04.19 |
[프로그래머스/Lv1/카카오] - 실패율 (0) | 2021.04.18 |
[프로그래머스/Lv1] - K번째 수 (0) | 2021.04.18 |