알고리즘/프로그래머스

프로그래머스 신규 아이디 추천 c++

이영재의오른발 2022. 5. 14. 14:06
반응형
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;

string solution(string new_id) {
    string answer = "";
    
    for(int i=0; i<7; i++) {
        if(i == 0) {
            for(int j=0; j<new_id.size(); j++) {
                if(new_id[j]>='A' && new_id[j]<='Z')
                    new_id[j] = tolower(new_id[j]);
            }
        }
        
        else if(i == 1) {
            for(int j=0; j<new_id.size(); j++) {
                if( (new_id[j] >= 'a' && new_id[j] <= 'z') || (new_id[j] >= '0' && new_id[j] <= '9') || new_id[j] == '-' || new_id[j] == '_' || new_id[j] == '.')
                answer.push_back(new_id[j]);
            }
        }
        
        
        else if(i==2) {
            int j = 1;
            while(j < answer.length()) {
                if(answer[j-1] == '.' && answer[j] == '.') {
                    answer.erase(answer.begin() + j);
                    continue; 
                }
                j++;
            }
        }
        
        else if(i == 3) {
            if(answer[0] == '.') {
                answer.erase(answer.begin());
            }
            if(answer[answer.length()-1] == '.') {
                answer.erase(answer.size()-1);
            }
        }
        else if(i == 4) {
            if(answer.length() == 0) {
                answer.push_back('a');
            }
        }
        else if(i == 5) {
            if(answer.length() >= 16) {
                answer.erase(answer.begin() + 15,answer.end());
                    if(answer[answer.length()-1] == '.') {
                        answer.erase(answer.end()-1);
                    } 
            }
        }
        else if(i == 6) {
            if(answer.length()<=2) {
                char c = answer[answer.length()-1];
                while(answer.length() != 3) {
                    answer.push_back(c);
                }
            }
        }
    }
    
    
    return answer;
}

단계 수에따라서 id의 모든 문자열을 한번씩 돌려주면 되는 쉬운 구현 문제이다

 

음... 뭐 딱히 어려운건없고 알아야 되는 함수로는

1단계 모든 대문자를 소문자로 바꿔주는 tolower 함수  tolower(바꿔줄 문자열의 인덱스삽입)

3단계 erase 함수 erase(삭제할 문자열의 인덱스)

 

정도만 알아주면 된다

 

처음부터 new_id에 있는 모든 문자열을 answer로 복사한뒤 삭제하는 방법으로 접근하는 방법으로 했을때는 정확도가 떨어졌었다 그래서 new_id의 문자열을 answer로 1번 2번 과정을 거친뒤 answer로 push해주니 성공했다. 

 

구현의 경우 최대한 복잡하지 않은 방법을 설계한뒤 풀어나가야겠다

728x90
반응형