-
[프로그래머스/Level 1] 신규 아이디 추천 (C++)알고리즘 문제풀이/프로그래머스 2021. 3. 7. 14:58
programmers.co.kr/learn/courses/30/lessons/72410
카카오 기출
문제 해결을 위해 알아두면 좋을 것
1. 대문자 <-> 소문자 변형이 필요할 때, transform() 함수를 사용한다.
2. 문자열에서 알파벳을 찾을 때, isalpha() 함수를 사용한다.
3. 문자열에서 숫자를 찾을 때, isdigit() 함수를 사용한다.
4. 문자열에서 특정 문자를 찾을 때, strchr() 함수를 사용한다.
문자열을 이용한 구현 문제였습니다. 문제에 나온 조건에 맞게 구현만 해주면 됩니다. 다만 3번 조건을 구현하는 과정에서 조금 애를 먹어 다른 블로그를 참고하여 해결하였습니다.
#include <string> #include <vector> #include <cstring> #include <algorithm> using namespace std; string solution(string new_id) { // 1. transform(new_id.begin(), new_id.end(), new_id.begin(), ::tolower); // 2. for(int i = 0; i < new_id.size();) { if(!isalpha(new_id[i]) && !isdigit(new_id[i]) && !strchr("-_.", new_id[i])) { new_id.erase(new_id.begin() + i); } else i++; } // 3. https://ansohxxn.github.io/programmers/73/ 참고 for(int i = 0; i < new_id.size() - 1;) { if(new_id[i] == '.' && new_id[i + 1] == '.') { new_id.erase(new_id.begin() + i); } else i++; } // 4. if(new_id.front() == '.') new_id.erase(new_id.begin()); if(new_id.back() == '.') new_id.pop_back(); // 5. if(new_id.empty()) new_id.push_back('a'); // 6. while(new_id.size() >= 16) { new_id.pop_back(); if(new_id.back() == '.') new_id.pop_back(); } // 7. if(new_id.size() <= 2) { while(new_id.size() < 3) { new_id.push_back(new_id.back()); } } return new_id; }
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level 2] 게임 맵 최단거리 (C++) (0) 2021.03.25 [프로그래머스/Level 1] 2016년 (C++) (0) 2021.03.16 [프로그래머스/Level 3] 멀리 뛰기 (C++) (0) 2021.02.27 [프로그래머스/Level 3] 스타 수열 (C++) (0) 2021.02.26 [프로그래머스/Level 3] 야근 지수 (C++) (0) 2021.02.25