반응형
문제 링크 : programmers.co.kr/learn/courses/30/lessons/72410
총평 :
아직 C++ stl을 완전 이해하지 못한 것 같다. 코딩테스트에 해당 문제가 나오고 구글링이 금지라면 꽤나 당황할 것 같다. 아래에 내가 헷갈렸던 것들을 적어보았다.
erase()는 두 가지 용법이 있다. 포인터로 사용하면 해당 위치를 삭제하고, 실제 숫자를 사용하면 해당 인덱스부터 n개를 삭제한다.
마찬가지로 end()와 begin()은 포인터이고 back()과 front()는 실제 값을 인수로 사용한다. 코드를 보면서 이해하면 빠르게 이해할 수 있을 것이다.
<코드>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
string solution(string new_id) {
string answer = "";
//1단계
for(int i=0; i<new_id.size(); i++){
if(isupper(new_id[i]))
new_id[i] = tolower(new_id[i]);
}
//2단계
for(int i=0;i<new_id.size(); i++){
if((new_id[i] >= 'a' && new_id[i] <= 'z') || isdigit(new_id[i]) || new_id[i] == '-' ||
new_id[i] == '.' || new_id[i] == '_'){
answer.push_back(new_id[i]);
}
}
//3단계
for(int i=1; i<answer.size();){
if(answer[i] == '.' && answer[i-1] == '.'){
answer.erase(i, 1);
continue;
}
else i++;
}
//4단계
if(answer.front() == '.') answer.erase(0, 1);
if(answer.back() == '.') answer.erase(answer.size() - 1, 1);
//5단계
if(answer.empty()) answer.push_back('a');
//6단계
if(answer.size() >= 16){
while(answer.size() != 15){
answer.erase(answer.end() - 1);
}
}
if(answer.back() == '.') answer.erase(answer.end() - 1);
//7단계
if(answer.size()<=2){
while(answer.size() != 3){
answer.push_back(answer.back());
}
}
return answer;
}
반응형
'Programming Solve > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 기능 개발 / C++ (0) | 2021.05.23 |
---|---|
프로그래머스 - 2016년 / C++ (0) | 2021.04.16 |
프로그래머스 - 체육복 / C++ (0) | 2021.03.24 |
프로그래머스 - 완주하지 못한 선수 / C++ (0) | 2021.03.06 |
프로그래머스 - 크레인 인형뽑기 / C++ (0) | 2021.03.06 |