https://school.programmers.co.kr/learn/courses/30/lessons/72410

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

내 풀이

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

string solution(string new_id) {
    string answer = "";
    //1
    for(auto &c : new_id){
        if(isupper(c)){
            c = tolower(c);
        }
    }

    //2
    string tmp = "";
    for(const auto &c : new_id){
        if(islower(c) || isdigit(c) || c == '-' || c == '.' || c == '_'){
          tmp+=c;  
        }
    }
    new_id = tmp;
    //3
    size_t pos;
    string tar = "..";
    while(!new_id.empty() && (pos = new_id.find(tar)) != string::npos )
    {
        new_id.erase(pos, 1); // ".." 을 "."으로 통합 
    }
    //4
    while(!new_id.empty() && (new_id[0] =='.' || new_id.back() == '.'))
    {
        if(new_id.front() == '.'){
            new_id.erase(new_id.begin()); // == (0, 1)  0번째 인덱스 1 글자 삭제
        }
        if(new_id.back() == '.'){
            new_id.erase(new_id.end()-1);
        }
    }
    //5
    if(new_id.empty()){
        new_id += "a";
    }
    //6-1
    if(new_id.size() >=16){
        new_id = new_id.substr(0, 15);
        while(new_id.back()== '.')
        {
            //6-2
            new_id.erase(new_id.size() - 1, 1); // new_id.size() -1 == new_id.end() - 1
        }
    }
    
    //7
    while(new_id.size() < 3){
        new_id += new_id[new_id.size()-1];
    }
    answer = new_id;
    return answer;
}

 

 

 

 

 

 

타인코드

#include <bits/stdc++.h>
using namespace std;

string solution(string new_id) {
    for (char& ch : new_id) if ('A' <= ch && ch <= 'Z') ch |= 32;

    string ret;
    for (char& ch: new_id) {
        if ('a' <= ch && ch <= 'z' ||
            '0' <= ch && ch <= '9' ||
            strchr("-_.", ch)) ret += ch;
    }

    new_id = ret;
    ret.clear();
    for (char& ch: new_id) {
        if (!ret.empty() && ret.back() == '.' && ch == '.') continue;
        ret += ch;
    }

    if (ret.front() == '.') ret.erase(ret.begin());
    if (ret.back() == '.') ret.pop_back();

    if (ret.empty()) ret = "a";
    if (ret.size() >= 16) ret = ret.substr(0, 15);
    if (ret.back() == '.') ret.pop_back();
    while (ret.size() <= 2) ret += ret.back();

    return ret;
}

 

back()를 잘 활용했네.

+ Recent posts