와이유스토리

[문자열] 프로그래머스 신규 아이디 추천 C++, Python 본문

코딩테스트/문자열

[문자열] 프로그래머스 신규 아이디 추천 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
Comments