알고리즘/프로그래머스
프로그래머스 신규 아이디 추천 c++
이영재의오른발
2022. 5. 14. 14:06
반응형
#include <string>
#include <vector>
#include <cstring>
#include <iostream>
using namespace std;
string solution(string new_id) {
string answer = "";
for(int i=0; i<7; i++) {
if(i == 0) {
for(int j=0; j<new_id.size(); j++) {
if(new_id[j]>='A' && new_id[j]<='Z')
new_id[j] = tolower(new_id[j]);
}
}
else if(i == 1) {
for(int j=0; j<new_id.size(); j++) {
if( (new_id[j] >= 'a' && new_id[j] <= 'z') || (new_id[j] >= '0' && new_id[j] <= '9') || new_id[j] == '-' || new_id[j] == '_' || new_id[j] == '.')
answer.push_back(new_id[j]);
}
}
else if(i==2) {
int j = 1;
while(j < answer.length()) {
if(answer[j-1] == '.' && answer[j] == '.') {
answer.erase(answer.begin() + j);
continue;
}
j++;
}
}
else if(i == 3) {
if(answer[0] == '.') {
answer.erase(answer.begin());
}
if(answer[answer.length()-1] == '.') {
answer.erase(answer.size()-1);
}
}
else if(i == 4) {
if(answer.length() == 0) {
answer.push_back('a');
}
}
else if(i == 5) {
if(answer.length() >= 16) {
answer.erase(answer.begin() + 15,answer.end());
if(answer[answer.length()-1] == '.') {
answer.erase(answer.end()-1);
}
}
}
else if(i == 6) {
if(answer.length()<=2) {
char c = answer[answer.length()-1];
while(answer.length() != 3) {
answer.push_back(c);
}
}
}
}
return answer;
}
단계 수에따라서 id의 모든 문자열을 한번씩 돌려주면 되는 쉬운 구현 문제이다
음... 뭐 딱히 어려운건없고 알아야 되는 함수로는
1단계 모든 대문자를 소문자로 바꿔주는 tolower 함수 tolower(바꿔줄 문자열의 인덱스삽입)
3단계 erase 함수 erase(삭제할 문자열의 인덱스)
정도만 알아주면 된다
처음부터 new_id에 있는 모든 문자열을 answer로 복사한뒤 삭제하는 방법으로 접근하는 방법으로 했을때는 정확도가 떨어졌었다 그래서 new_id의 문자열을 answer로 1번 2번 과정을 거친뒤 answer로 push해주니 성공했다.
구현의 경우 최대한 복잡하지 않은 방법을 설계한뒤 풀어나가야겠다
728x90
반응형