https://school.programmers.co.kr/learn/courses/30/lessons/72410
이 문제는 문자열 조작을 통해 해결할 수 있다.
문제에서 단계별로 수행할 연산을 알려주고 있다.
따라서 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;
}
'Programmers Review' 카테고리의 다른 글
[Lv 1] 숫자 짝꿍 (0) | 2024.06.07 |
---|---|
[Lv 1] 최소직사각형 (0) | 2024.06.07 |
[Lv 1] 3진법 뒤집기 (0) | 2024.06.04 |
[Lv 1] 두 개 뽑아 더하기 (0) | 2024.06.04 |
[Lv 1] 실패율 (0) | 2024.06.04 |