풀이과정
문제가 길어 당황할 수 있지만, 단계별로 해나가면 풀 수 있는 문제이다.
단계를 보면 문자를 제거하라는 조건이 있는데 여기서 공백으로 치환해줬다.
공백으로 치환해줬으면 erase와 remove 함수를 써서 지워줘야 한다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string new_id) {
string answer = "";
// 1단계
for(int i = 0; i < new_id.size(); i++){
if('A' <= new_id[i] && new_id[i] <= 'Z') new_id[i] += 32;
}
// 2단계
for(int i = 0; i < new_id.size(); i++){
if('a' <= new_id[i] && new_id[i] <= 'z' || '0' <= new_id[i] && new_id[i] <= '9')
continue;
if(new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.')
continue;
new_id[i] = ' ';
}
new_id.erase(remove(new_id.begin(), new_id.end(), ' '), new_id.end());
// 3단계
for(int i = 0; i < new_id.size() - 1; i++){
if(new_id[i] == '.'){
while(new_id[i + 1] == '.'){
new_id[i + 1] = ' ';
i++;
}
}
}
new_id.erase(remove(new_id.begin(), new_id.end(), ' '), new_id.end());
// 4단계
if(new_id[0] == '.') new_id[0] = ' ';
if(new_id[new_id.size() - 1] == '.') new_id[new_id.size() - 1] = ' ';
new_id.erase(remove(new_id.begin(), new_id.end(), ' '), new_id.end());
// 5단계
if(new_id.size() == 0) new_id += "a";
// 6단계
if(new_id.size() >= 16){
for(int i = 15; i < new_id.size(); i++){
new_id[i] = ' ';
}
if(new_id[14] == '.') new_id[14] = ' ';
}
new_id.erase(remove(new_id.begin(), new_id.end(), ' '), new_id.end());
// 7단계
if(new_id.size() <= 2){
char c = new_id[new_id.size() - 1];
while(new_id.size() <= 2){
new_id += c;
}
}
answer = new_id;
return answer;
}
'🍞 Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스][Level2] 2 x n 타일링 c++ (0) | 2022.10.20 |
---|---|
[프로그래머스][Level1] 크레인 인형뽑기 게임 c++ (0) | 2022.09.03 |
[프로그래머스][Level1] 신고 결과 받기 c++ (0) | 2022.09.03 |
[프로그래머스][Level1] 문자열 내 마음대로 정렬하기 c++ (0) | 2022.09.03 |
[프로그래머스][Level1] 2016년 c++ (0) | 2022.09.03 |