250x250
반응형
Notice
Recent Posts
Recent Comments
Link
N
(프로그래머스 c++ KAKAO)신규 아이디 추천 본문
728x90
반응형
programmers.co.kr/learn/courses/30/lessons/72410
지문에 나와있는 것처럼 순서대로 하면 된다.
1. transform()을 이용해 소문자로 바꾸기.
2. for문을 이용해 알파벳, 숫자, '.', '-', '_'을 제외한 문자 제거.
3. 이중 for문으로 연속된 점 하나로 통합.
4. 맨 앞과 맨 뒤에 온점 제거.
5. 4번까지의 결과가 비어있다면 'a'로 만들기.
6. 지금까지의 결과가 16자 이상이면 앞에서부터 15자까지 자른 후 맨 뒤의 온점이 있다면 제거.
7. 6번까지의 결과가 2글자 이하라면 3글자가 될 때까지 맨 뒤의 글자 붙이기.
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
string solution(string new_id) {
string answer = "";
string tmp = "";
//1단계
transform(new_id.begin(), new_id.end(), new_id.begin(), ::tolower);
//2단계
for(int i = 0; i < new_id.size(); i++){
if((new_id[i] >= 'a' && new_id[i] <= 'z') || (new_id[i] >= '0' && new_id[i] <= '9') || new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.' ){
answer += new_id[i];
}
}
//3단계
for(int i = 0; i < answer.size(); i++){
if(answer[i] == '.'){
int cnt = 0;
for(int j = i + 1; j < answer.size(); j++){
if(answer[j] == '.'){
cnt++;
}
else{
break;
}
}
if(cnt > 0){
tmp += '.';
i += cnt;
}
else{
tmp += answer[i];
}
}
else{
tmp += answer[i];
}
}
//4단계
if(tmp.front() == '.'){
tmp.erase(tmp.begin());
}
if(tmp.back() == '.'){
tmp.pop_back();
}
//5단계
if(tmp.empty()){
tmp = "a";
}
//6단계
if(tmp.size() >= 16){
tmp = tmp.substr(0, 15);
}
if(tmp.back() == '.'){
tmp.pop_back();
}
//7단계
while(tmp.size() <= 2){
tmp.push_back(tmp.back());
}
return tmp;
}
728x90
반응형
'프로그래머스 알고리즘 > KAKAO' 카테고리의 다른 글
(프로그래머스 c++ KAKAO)자물쇠와 열쇠 (0) | 2021.03.04 |
---|---|
(프로그래머스 c++ KAKAO)순위 검색 (0) | 2021.03.03 |
(프로그래머스 c++ KAKAO)단체사진 (0) | 2020.11.21 |
(프로그래머스 c++ KAKAO)매칭 점수 (0) | 2020.09.07 |
(프로그래머스 c++ KAKAO)길 찾기 게임 (0) | 2020.08.20 |