Programmers Review

[Lv 1] 신규 아이디 추천

hanseongbugi 2024. 6. 4. 18:02

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제는 문자열 조작을 통해 해결할 수 있다.

문제에서 단계별로 수행할 연산을 알려주고 있다.

따라서 1단계 부터 7단계 까지 순차적으로 해결하면 된다.

 

1단계와 2단계는 묶어서 해결할 수 있다.

new_id 문자열을 순회하며 대문자인 경우 소문자로 변경하고 특수 기호에 해당하는 경우 그 문자를 erase 함수를 통해 제거한다.

제거하는 경우 다음 문자 순회를 위해 인덱스를 한칸 뒤로 이동시켜야한다.

 

3단계의 경우 new_id 문자열을 순회하며 '.'을 발견하는 경우 이전 문자도 '.'인 경우 현재 인덱스의 '.'을 제거한다.

이러면 "..."이나 ".."인 경우 "."만 남길 수 있다.

 

4단계의 경우 첫번째 인덱스와 마지막 인덱스가 '.'이라면 점을 지우면 된다.

 

5단계의 경우 문자열이 비어있을 때 "a"로 문자열을 변경한다.

 

6단계의 경우 문자열의 길이가 15보다 크면 문자열을 15 크기로 자른다.

잘랐을 때 마지막 인덱스의 문자가 '.'인 경우 제거한다.

 

7단계의 경우 문자열의 크기가 3보다 작으면 3이될때 까지 마지막 문자을 추가한다.

 

#include <string>
#include <vector>

using namespace std;

string test = "~!@#$%^&*()=+[{]}:?,<>/";

string solution(string new_id) {
    string answer = "";
    
    // 1, 2 단계
    for(int i = 0;i<new_id.length();i++){
        if(new_id[i] >= 'A' && new_id[i] <= 'Z')
            new_id[i] += 32;
        
        for(int j = 0;j<test.length();j++)
            if(new_id[i] == test[j]){
                new_id.erase(new_id.begin()+i);
                i--;
            }
    }
    // 3단계
    for(int i = 1; i < new_id.length(); ){
        if (new_id[i] == '.' && new_id[i - 1] == '.'){
            new_id.erase(new_id.begin() + i);
            continue;
        }
        else i++;
    }
    // 4단계
    if(new_id[0] == '.') 
        new_id.erase(new_id.begin());
    if(new_id[new_id.length() - 1] == '.') 
        new_id.erase(new_id.begin() + new_id.length() - 1);
    // 5단계
    if(new_id.empty()) new_id = "a";
    // 6단계
    if(new_id.length() > 15){
        new_id = string(new_id.begin(), new_id.begin() + 15);
        if(new_id[new_id.length() - 1] == '.')
            new_id.erase(new_id.begin() + new_id.length() - 1);
    }
    // 7단계
    while(new_id.length()<3)   
        new_id += new_id[new_id.length() - 1];
    
    answer = new_id;
    return answer;
}