신규 아이디 추천

NJW·2022년 4월 9일
0

코테

목록 보기
89/170

들어가는 말

아이디를 규칙에 맞게 만들어서 새로운 아이디를 제시하는 문제다. 노가다로 하면 그렇게 어렵지 않았다. 하지만... 노가다와 어렵지 않다에서 문제가 있었으니...

바로 테스트 케이스는 전부 맞는데 제출 후 채점하기에서 틀린 문제가 나오는 것이다! 내가 이거 때문에 한 시간 넘게 고민했다. 그러나 어느 테스트 케이스를 넣어도 전부 통과고... 그렇다고 제출 후 채점하기에서 다 맞는 것도 아니고... 뭐가 잘못 됐는지 나는 모르겠고... 정말 나중에는 화났다. 다이어트해야 하는데 이거 때문에 딸기에 연유 찍어 먹었잖아. 스트레스 받아서.

아무튼! 그래서 틀린 부분을 알아냈다. 바로 스탭 3! 스탭 3에서 replace를 썼는데 아마 문제가 생긴 건 아닌가 싶다(어느 블로그에서 봤다. 그분도 자꾸 재출 후 채점하기가 통과되지 않았는데, replace를 의심하시더라...). 그래서 다른 블로그를 참고해서 스탭 3을 고쳤더니 통과가 됐다. 후... 멀고도 험한 신규 아이디 추천이여...

코드 설명

처음 for문은 스탭 1과 2다. 하나씩 검사하면서 대문자일 경우 소문자로 바꿔줘서 tmps에 넣어주고 소문자와 숫자일 경우는 그냥 넣고 (- .)일 경우에는 그냥 넣어준다. 이렇게 되면 자동으로 해당되지 않은 문자들을 걸러진다.

그 다음은 대망의 스탭 3. 온점이 i와 i-1일때면 i부분을 지워주도록 한다. 만일 아닐 경우에는 i++를 한다. 해당할 때는 i를 ++하지 않는 이유는 그 다음 것도 확인하기 위해서다.

그리고 앞 부분과 뒷 부분에 .이 있다면 erase를 한다. 여기서 나는 string에도 pop_back()이 된다는 걸 처음 알았다.

다섯 번째는 tmp_s가 공백일 경우 a를 넣어주는 거다.

여섯 번째는 길이가 16보다 클 경우 15로 문자를 잘라준다. 그리고 뒷 부분에 .이 있다면 이것 또한 pop_back()을 지워준다.

마지막으로는 길이가 2 이하인 문자열을 3이상으로 만들어주는 거다. char add에 마지막 문자를 넣어서 length()가 3보다 작을 때까지 add를 더해주면 된다.

코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

string solution(string new_id) {
    string answer = "";
    string tmp_s = "";
    int dot = 0;
    
    for(int i = 0; i<new_id.length(); i++){
        if(65 <= new_id[i] && new_id[i] <= 90){
            tmp_s += (new_id[i] + 32);
        }else if(97 <= new_id[i] && new_id[i] <= 122){
            tmp_s += new_id[i];
        }
        else if(48 <= new_id[i] && new_id[i] <= 57){
            tmp_s += new_id[i];
        }else if(new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.'){
            tmp_s += new_id[i];
        }
    }

    
    for(int i=1; i<tmp_s.length(); ){
        if(tmp_s[i] == '.' && tmp_s[i-1] == '.'){
            tmp_s.erase(tmp_s.begin() + i);
            continue;
        }else{
            i++;
        }
    }
    
    if(tmp_s[0] == '.'){
        tmp_s.erase(tmp_s.begin());
    }
    
    if(tmp_s[tmp_s.length()-1] == '.'){
        tmp_s.pop_back();
    }
    
    if(tmp_s == ""){
            tmp_s = 'a';
    }
    
    if(tmp_s.length() >= 16){
        tmp_s.erase(15, tmp_s.length());
    }
    
        if(tmp_s.back() == '.'){
        tmp_s.pop_back();
    }

    if(tmp_s.length() <= 2){
        char add = tmp_s[tmp_s.length()-1];
        while(tmp_s.length() < 3){
            tmp_s += add;
        }
    }


   
    return tmp_s;
}
profile
https://jiwonna52.tistory.com/

0개의 댓글