Kiki Devlog

[프로그래머스][Lv 1] 신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT) 본문

Coding Test/프로그래머스

[프로그래머스][Lv 1] 신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT)

kimkiki 2022. 8. 15. 14:31
728x90

문제 링크

코딩테스트 연습 - 신규 아이디 추천 | 프로그래머스 스쿨 (programmers.co.kr)

 

후기

푸는 로직은 어렵지 않아서 풀긴 했는데, 코드를 깔끔하게 줄이는게 어려운 것 같다. 

다른사람 풀이를 보니까 string 자체에서 pop_back() 같은 함수를 쓰는데 string 에 저런 함수를 쓸 수 있다는걸 처음 알았다.  새로운 정보 알아서 문제 푼 보람이 있다

(string class가 제공하는 기능들이 더 궁금하다면 string - C++ Reference (cplusplus.com) )

 

내 코드

#include <string>
#include <iostream>
#include <deque>
#include <cctype>

using namespace std;

string solution(string new_id) {
    string answer = "";
    deque<char> q;
    
    
    for(auto c : new_id){
        if(c >='A' && c <='Z')//1단계
           c=tolower(c);
           
        if((c >='a' && c <='z') || (c >='0' && c <='9') ||(c=='-') || (c=='_') || (c=='.')){//2,3단계
            if(c=='.' && !q.empty()){
                while(!q.empty() && q.back() =='.')
                    q.pop_back();
            }
            q.push_back(c);
        }    
    }
    
    //4번
    if(!q.empty() && q.front() == '.')
        q.pop_front();
     if(!q.empty() && q.back() == '.')
        q.pop_back();
    
    
    //5번
    if(q.size() == 0)
        q.push_back('a');
    //6번
    while(q.size()>15)
        q.pop_back();
    if(q.back() == '.')
        q.pop_back();
    //7번
    while(q.size()<3)
        q.push_back(q.back());

    for(int i = 0;i<q.size();i++){
        answer += q[i];
    }
    
    return answer;
}
Comments