코딩테스트/문자열
[문자열] 프로그래머스 신규 아이디 추천 C++, Python
유(YOO)
2021. 12. 29. 21:00
※ 문제
https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
3,4,5,11,15,22 TC (3단계에서 오류, "z_.."=>"z_..") 해결
#include <string>
#include <vector>
using namespace std;
string solution(string new_id) {
string answer = "";
//1단계
for (int i = 0; i < new_id.length(); i++)
if ((new_id[i] >= 'A') && (new_id[i] <= 'Z')) new_id[i] += 32; // 대문자+32=소문자
}
//2단계
for (int i = 0; i < new_id.length(); 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.length(); i++) {
if (answer[i] == '.') {
for (int j = i; j <answer.length(); j++) {
if (answer[j] == '.') {
if (j==answer.length()-1) { // 조심
answer.erase(i, j);
break;
}
continue;
}
else {
answer.erase(i, j-i-1);
break;
}
}
}
}
//4단계
if ((answer.length()>0)&&(answer[answer.length() - 1] == '.')) { // 조심
//answer.erase(answer.length()-1);
if (answer.length() == 1) answer.erase(0,1);
else { answer = answer.substr(0, answer.length() - 2);}
}
if (answer[0] == '.') answer.erase(0,1);
//5단계
if (answer.length() == 0)answer += 'a'; // answer[i]='a'(X)
//6단계
if (answer.length() >= 16) {
answer = answer.substr(0,15);
if (answer[14] == '.') answer.erase(14);
}
//7단계
if (answer.length() <= 2) {
for(int i=answer.length(); i<3; i++) {
answer += answer[answer.length() - 1];
}
}
return answer;
}
※ Python 정규식으로 풀어보기(다른 코드 참고)
import re
def solution(new_id):
answer = ''
answer = new_id.lower()
answer = re.sub('[^a-z0-9-_\.]+', "", answer) # + 조심
answer = re.sub('\.\.+',".",answer) # [] 없음
answer = answer.strip('.') # 앞, 뒤 문자 삭제
if len(answer) == 0: answer = 'a'
answer = answer[:15].strip('.')
answer += answer[-1] * (3-len(answer))
return answer