Level 1. 신규 아이디 추천
디버깅이 수월하도록 각 단계를 함수로 나눴다.
string은 다양한 자료구조 함수를 지원하기 때문에 문자열보다는 자료구조처럼 활용했다.
step3()에서 unique() 함수를 저렇게 활용하면 연속된 문자를 제거할 수 있다.
#include <iostream>
#include <algorithm>
#include <cctype>
using namespace std;
void step1(string& s)
{
transform(s.begin(), s.end(), s.begin(), [](char c) { return isalpha(c) ? tolower(c) : c; });
}
void step2(string& s)
{
auto it = remove_if(s.begin(), s.end(), [](char c) { return !(isalpha(c) || isdigit(c) || c == '-' || c == '_' || c == '.'); });
s.erase(it, s.end());
}
void step3(string& s)
{
auto it = unique(s.begin(), s.end(), [](char a, char b) { return (a == '.') && (b == '.'); });
s.erase(it, s.end());
}
void step4(string& s)
{
if (!s.empty() && s[0] == '.') s.erase(s.begin());
if (!s.empty() && s.back() == '.') s.erase(s.end() - 1);
}
void step5(string& s)
{
if (s == "") s = "a";
}
void step6(string& s)
{
if (16 <= s.length())
{
s = s.substr(0, 15);
step4(s);
}
}
void step7(string& s)
{
while (s.length() < 3)
s += s.back();
}
string solution(string new_id)
{
step1(new_id);
step2(new_id);
step3(new_id);
step4(new_id);
step5(new_id);
step6(new_id);
step7(new_id);
return new_id;
}
다른 사람의 풀이를 보던 중 문자열에서 문자를 검색하는 strchr() 함수라는 것을 알게 되었다.
또, string에서 pop_back() 함수를 지원하기 때문에 string.erase(s.end() - 1) 대신 사용할 수 있다.
#include <iostream>
#include <algorithm>
#include <cctype>
#include <cstring>
using namespace std;
void step1(string& s)
{
transform(s.begin(), s.end(), s.begin(), [](char c) { return isalpha(c) ? tolower(c) : c; });
}
void step2(string& s)
{
auto it = remove_if(s.begin(), s.end(), [](char c) { return !(isalpha(c) || isdigit(c) || strchr("-_.", c)); });
s.erase(it, s.end());
}
void step3(string& s)
{
auto it = unique(s.begin(), s.end(), [](char a, char b) { return (a == '.') && (b == '.'); });
s.erase(it, s.end());
}
void step4(string& s)
{
if (!s.empty() && s.front() == '.') s.erase(s.begin());
if (!s.empty() && s.back() == '.') s.pop_back();
}
void step5(string& s)
{
if (s.empty()) s = "a";
}
void step6(string& s)
{
if (16 <= s.length())
{
s = s.substr(0, 15);
step4(s);
}
}
void step7(string& s)
{
while (s.length() < 3)
s += s.back();
}
string solution(string new_id)
{
step1(new_id);
step2(new_id);
step3(new_id);
step4(new_id);
step5(new_id);
step6(new_id);
step7(new_id);
return new_id;
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 1. 둘만의 암호 (0) | 2023.03.07 |
---|---|
Level 1. 부족한 금액 계산하기 (0) | 2023.03.06 |
Level 1. 크레인 인형뽑기 게임 (0) | 2023.03.04 |
Level 1. 키패드 누르기 (0) | 2023.03.03 |
Level 1. [1차] 다트 게임 (0) | 2023.03.02 |