문제 설명 |
본 문제는 프로그래머스의 신규아이디 추천 문제로 어느 조건에서 벗어난 아이디를 수정하여 추천한다는 컨셉입니다.
조건은 아래와 같습니다.
해결 과정 |
크게 해결과정이랄까 주어진 조건에 맞춰 하나씩 구현한게 전부입니다. 대부분 STL의 강력한 함수를 통하여 구현하였고3번째 조건의 연속적인 ..을 하나로 줄여주는 경우는 for문 안에서 조건문으로 다루는 방법과 스택을 사용하여 처리하는 방법이 있습니다.
코드 전문 |
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
string solution(string new_id) {
string answer = "";
stack<char> stk;
string s = std::move(new_id);
string temp_str;
transform(s.begin(), s.end(), s.begin(), [](unsigned char c) ->
unsigned char { return std::tolower(c); });
for (auto ch : s)
{
if ((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')
|| ch == '-' || ch == '_' || ch == '.')
{
temp_str.push_back(ch);
}
}
s = move(temp_str);
temp_str.clear();
/** lv3 using stack
stk.push('.');
for (auto ch : s)
{
if (stk.top() == '.' && ch == '.') stk.pop();
stk.push(ch);
}
while (!stk.empty())
{
temp_str.push_back(stk.top());
stk.pop();
}
s = move(temp_str);
reverse(s.begin(), s.end()); **/
/** lv3 using for-each **/
for (auto ch : s)
{
if (temp_str.back() == '.' && ch == '.') continue;
temp_str.push_back(ch);
}
s = move(temp_str);
if (s.front() == '.') s.erase(s.begin());
if (s.back() == '.') s.erase(s.end() - 1);
if (s.empty()) s.push_back('a');
if (s.size() >= 16) s.erase(s.begin() + 15, s.end());
if (s.back() == '.') s.erase(s.end() - 1);
if (s.size() <= 2)
{
for (; s.size() < 3;)
{
s += *(s.end() - 1);
}
}
answer = std::move(s);
return answer;
}
느낀 점 (잡설 99% , 배운점 1%(많은 편)) |
더보기
string 라이브러리에 관련하여 정말 다양한 함수들을 알아보는 계기가 되었습니다. 람다함수라는 것도 써보았네요.
멋지게 생겼습니다 화살표 같은 것도 있고 최첨단 무기라는 느낌.
예전에 PS를 공부할 땐 연속된 문자의 중복을 검증할 땐 스택으로만 접근을 해봤는데 다른 사람들의 코드도 살펴보며 for문을 통해서도 해결해보았네요. 이번에 배운 string 관련 함수들을 한 번 정리해야겠습니다.
긴 글 읽어주셔서 감사합니다.
부족한 점이 있다면 부디 알려주시면 감사하겠습니다.
'알고리즘 부셔버렷 > ProblemSolving' 카테고리의 다른 글
[프로그래머스] 키패드 누르기 (설명, 해결 과정, 코드 전문, c++) (0) | 2022.05.27 |
---|---|
[프로그래머스] 숫자 문자열과 영단어 (문제 설명, 해결 과정, 코드 전문, c++) (0) | 2022.05.27 |
[프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.05.27 |
[프로그래머스] 신고 결과 받기 (문제 해결 과정, 코드 전문, C++) (0) | 2022.05.26 |
[LeetCode 415] Add Strings (문제 설명, 해결 과정, 코드 전문, 느낀 점) (0) | 2022.05.12 |
댓글