728x90
내 풀이
ㅠㅠ for문 돌릴 때 증감자 없애고 안에서 쓸 수 있는걸 몰라서 엄청 삽질했다...
#include <string>
#include <vector>
using namespace std;
string solution(string new_id) {
//1단계 대문자 -> 소문자
for (int i = 0; i < new_id.size(); i++) {
if (new_id[i] >= 'A' && new_id[i] <= 'Z')
new_id[i] = tolower(new_id[i]);
}
//2단계 소문자, 숫자, -, _, . 제외 제거
for (int i = 0; i < new_id.size(); ) {
if ((new_id[i] >= 'a' && new_id[i] <= 'z') || (new_id[i] >= '0' && new_id[i] <= '9') || new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.') {
i++;
continue;
}
new_id.erase(i,1);
}
//3단계 ..이 연속 두개면 . 하나로 만들기
for (int i = 1; i < new_id.size(); ) {
if (new_id[i - 1] == '.' && new_id[i] == '.') new_id.erase(i, 1);
else i++;
}
//4단계 .이 처음이나 끝에 있으면 제거
if (new_id[0] == '.') new_id.erase(0, 1);
if (new_id.back() == '.') new_id.erase(new_id.size()-1, 1);
//5단계 new_id가 빈 문자열이면 'a' 대입
if (new_id.size() == 0) new_id.push_back('a');
//6단계 길이 16자 이상이면 15개 뒤에거 제거
if (new_id.size() >= 16) new_id.erase(15, new_id.size() - 15);
if (new_id.back() == '.') new_id.erase(new_id.size() - 1, 1);
//7단계 길이가 2자 이하면 마지막 문자를 new_id 길이 3 될때까지 반복
if (new_id.size() == 1) {
//new_id.back();
new_id.push_back(new_id.back());
new_id.push_back(new_id.back());
}
if (new_id.size() == 2) new_id.push_back(new_id.back());
return new_id;
}
'[C_C++]코딩테스트 연습 > [프로그래머스] level 1' 카테고리의 다른 글
[C++] 프로그래머스 - 예산 (0) | 2021.07.13 |
---|---|
[C++] 프로그래머스 - 소수 만들기 (0) | 2021.07.13 |
[C++] 프로그래머스 - 크레인 인형뽑기 (0) | 2021.07.02 |
[C++] 프로그래머스 - 2016년 (0) | 2021.07.02 |
[C++] 프로그래머스 - 모의고사 (0) | 2021.07.02 |