문제풀이(Problem Solving)

프로그래머스 카카오, 신규 아이디 추천 C++ [CPP] ★★★★

게임이 더 좋아 2022. 5. 8. 21:33
반응형
728x170

문자열 처리의 정말 정석이 아닐까 싶다.

 

 

 

https://programmers.co.kr/learn/courses/30/lessons/72410?language=cpp 

 


 

#맞은 풀이

#include<bits/stdc++.h>


using namespace std;

bool IsValidChar(char c){
    if(isalnum(c))return true;
    if(c == '-' || c == '_' || c == '.')return true;
    
    return false;
    
    
}

string solution(string new_id) {
    string answer = "";
    
    //모든 문자열을 뒤짐.
    for(auto c : new_id){
        if(!IsValidChar(c))continue; //조건 2

        c = tolower(c); //조건 1
        
        //조건 4
        if(answer.size() == 0 && c == '.')continue; //가장 처음에 오는 .은 삭제
        
        //조건 3
        if(answer.back() == '.' && c == '.')continue; //연속되는 .는 삭제
        answer.push_back(c);
    }
    
    //조건 5
    if(answer.size() == 0){
        answer.push_back('a');
    }
    
    //조건 6
    while(answer.size() >= 16){
        answer.pop_back();
    }
    while(answer.back() == '.'){
        answer.pop_back();
    }
    
    //조건 7
    while(answer.size() <= 2){
        char temp = answer.back();
        answer.push_back(temp);
    }

    return answer;
}

 

실제로 조건대로 구현했다.

순서는 상관없었고

조건대로 구현했다.

 

728x90
반응형
그리드형