레벨 1짜리 문제로 비교적 쉽다.
빠른 시간내에 구현해내는게 중요할듯하다.
isdigit, islower, tolower 정도만 썼는데, string의 substr, front, back, erase, begin, pop_back 등도 쓰면 더 코드를 짧게 작성할 수 있을 것 같다.
#include <string>
#include <vector>
#include <cstdio>
using namespace std;
string new_id;
string answer = "";
int base_size;
void level1()
{
for(int i=0;i<new_id.size();i++)
answer += tolower(new_id[i]);
}
void level2()
{
string tmp = "";
for(int i=0;i<answer.size();i++) {
if(islower(answer[i]))
tmp += answer[i];
else if(isdigit(answer[i]))
tmp += answer[i];
else if(answer[i] == '-' || answer[i] == '_' || answer[i] == '.')
tmp += answer[i];
}
answer = tmp;
}
void level3()
{
string tmp = "";
for(int i=0;i<answer.size();i++) {
if(answer[i] != '.') {
tmp += answer[i];
continue;
}
tmp += answer[i];
int idx = 1;
while(1) {
if(i + idx > answer.size() - 1)
break;
if(answer[i + idx] != '.')
break;
idx++;
}
i = i + idx - 1;
}
answer = tmp;
}
void level4()
{
string tmp = "";
for(int i=0;i<answer.size();i++) {
if(i == 0 && answer[0] == '.')
continue;
if(i == answer.size() - 1 && answer[answer.size() - 1] == '.')
continue;
tmp += answer[i];
}
answer = tmp;
}
void level5()
{
if(answer.size() != 0)
return;
answer += 'a';
}
void level6()
{
if(answer.size() < 16)
return;
int last = answer[14] == '.' ? 14 : 15;
string tmp = "";
for(int i=0;i<last;i++)
tmp += answer[i];
answer = tmp;
}
void level7()
{
if(answer.size() > 2)
return;
char last = answer[answer.size() - 1];
while(1) {
if(answer.size() == 3)
break;
answer += last;
}
}
string solution(string input) {
base_size = input.size();
new_id = input;
level1();
level2();
level3();
level4();
level5();
level6();
level7();
return answer;
}