C++:: 프로그래머스 < 신규 아이디 추천 >

jahlee·2023년 6월 23일
0

프로그래머스_Lv.1

목록 보기
38/75
post-thumbnail

주어진 조건에 맞춰서 아이디를 변형해주면 되는 문제이다. string 함수를 더 잘쓰면 간결히 할 수 있는 문제이다.

#include <string>
#include <vector>
using namespace std;

string solution(string new_id) {
    string tmp = "";
    for (int i=0; i<new_id.size(); i++) {
        if (isupper(new_id[i])) tmp += tolower(new_id[i]);
        else if (isalnum(new_id[i]) || new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.')
            tmp += new_id[i];
    }
    for (int i=tmp.size()-1; i>0; i--) {
        if (i==tmp.size()-1 && tmp[i] == '.')
            for (i; tmp[i] == '.'; i--) tmp[i] = ' ';
        else if (tmp[i-1] == '.' && tmp[i] == '.') tmp[i] = ' ';
    }
    if (tmp[0] == '.') tmp[0] = ' ';
    string answer = "";
    for (auto c : tmp) if (c != ' ') answer += c;
    if (answer == "") answer += 'a';
    int answerSize = answer.size();
    if (answerSize >= 16) {
        answer = answer.substr(0, 15);
        if (answer[14] == '.') answer = answer.substr(0, 14);
    } else if (answerSize <= 2) {
        while (answer.size() != 3) answer.push_back(answer[answer.size()-1]);
    }
    return answer;
}

보완 코드

다음은 더 간결히 구현한 코드이다

#include <string>
#include <vector>
using namespace std;

string solution(string new_id) {
    for (int i=0; i<new_id.size(); i++) {
        if (isupper(new_id[i])) new_id[i] = tolower(new_id[i]);// 소문자로 변환
        else if (!isalnum(new_id[i]) && new_id[i] != '-' && new_id[i] != '_' && new_id[i] != '.') {
            new_id.erase(new_id.begin() + i--); // 허용 문자가 아니면 삭제
        }
    }
    for (int i=new_id.size()-1; i>0; i--)
        if (new_id[i-1] == '.' && new_id[i] == '.') new_id.erase(new_id.begin() + i);// 연속된 점이면 뒷점 삭제
    if (new_id[new_id.size()-1] == '.') new_id.erase(new_id.end()-1);// 시작이 점이면 삭제
    if (new_id[0] == '.') new_id.erase(new_id.begin());// 마지막이 점이면 삭제
    if (new_id == "") new_id += 'a';// 빈 문자열이면
    int size = new_id.size();
    if (size <= 2) while (new_id.size() != 3) new_id.push_back(new_id[size-1]);// 길이가 2보다 작으면 
    if (size >= 16) { // 길이가 16이상이면
        new_id = new_id.substr(0, 15);
        if (new_id[14] == '.') new_id.erase(new_id.end()-1); // 마지막이 점으로 끝나면
    }
    return new_id;
}

0개의 댓글