프로그래머스 코딩테스트 연습 - 신규 아이디 추천(Level 1)
PS/Programmers

프로그래머스 코딩테스트 연습 - 신규 아이디 추천(Level 1)

programmers

 

문제

프로그래머스 코딩테스트 연습 - 신규 아이디 추천(Level 1)

2021 카카오 블라인드테스트

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

 

코딩테스트 연습 - 신규 아이디 추천

카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로

programmers.co.kr


사용 알고리즘

- 문자열

 

풀이

문제에 제시된 순서대로 문자열을 처리한 후 반환한다.

 

나의 코드

#include <string>
#include <vector>

using namespace std;

string solution(string new_id) {
    string answer = "";
    int i, len;
    char cc=0;
    len = new_id.length();
    for(i=0;i<len;i++){
        if(new_id[i]<='Z'&&new_id[i]>='A') 
             new_id[i]+=32;
        char c = new_id[i];
        if((c>='a'&&c<='z')||(c>='0'&&c<='9')||c=='-'||c=='_'){
            cc=c;
            answer+=c;
        }
        if(c=='.'){
            if(cc!='.'&&cc!=0) answer+=c, cc=c;
        }        
    }
    if(answer[answer.length()-1]=='.') answer.erase(answer.length()-1);
    if(answer.length()==0) answer+='a';
    if(answer.length()>15) {
        answer.erase(15);
        if(answer[14]=='.') answer.erase(14);
    }
    if(answer.length()<3){
        for(int i=answer.length();i<=2;i++){
            answer+=answer[answer.length()-1];
        }
    }
    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;
}

 

배울 점이 많은 코드인듯

728x90