프로그래머스 알고리즘/KAKAO
(프로그래머스 c++ KAKAO)신규 아이디 추천
naeunchan
2021. 2. 19. 21:08
728x90
반응형
programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 카카오계정개발팀에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. 네오에게 주어진 첫 업무는 새로 가
programmers.co.kr
지문에 나와있는 것처럼 순서대로 하면 된다.
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
반응형