문제
풀이
#include <string>
#include <vector>
using namespace std;
string solution(string new_id) {
string answer = "";
//1단계
for(int i=0; i<new_id.length();i++){
new_id[i] = tolower(new_id[i]);
}
//2단계
for(int i=0; i<new_id.length();i++){
if((new_id[i] == '-' || new_id[i] == '_' || new_id[i] == '.') ||
(new_id[i] >= 'a' && new_id[i] <= 'z') ||
(new_id[i] >= '0' && new_id[i] <= '9')){//숫자
answer += new_id[i];
}
}
//3단계
for(int i=0; i< answer.length()-1; i++){
if (answer[i] == answer[i+1] && answer[i] == '.'){
answer.erase(i, 1);
i--;
}
}
//4단계
if(answer[0] == '.') answer.erase(0,1);
if(answer[answer.length()-1] == '.') answer.erase(answer.length()-1, 1);
//5단계
if(answer == "") answer = "a";
//6단계
if(answer.length() >= 16) answer = answer.substr(0,15);
if(answer[answer.length()-1] == '.') answer.erase(answer.length()-1, 1);
//7단계
if(answer.length() <= 2){
char last = answer[answer.length()-1];
while(answer.length() < 3){
answer += last;
}
}
return answer;
}
다른 사람 풀이
#include <bits/stdc++.h>
using namespace std;
string solution(string new_id) {
for (char& ch : new_id) if ('A' <= ch && ch <= 'Z') ch |= 32;
string ret;
for (char& ch: new_id) {
if ('a' <= ch && ch <= 'z' ||
'0' <= ch && ch <= '9' ||
strchr("-_.", ch)) ret += ch;
}
new_id = ret;
ret.clear();
for (char& ch: new_id) {
if (!ret.empty() && ret.back() == '.' && ch == '.') continue;
ret += ch;
}
if (ret.front() == '.') ret.erase(ret.begin());
if (ret.back() == '.') ret.pop_back();
if (ret.empty()) ret = "a";
if (ret.size() >= 16) ret = ret.substr(0, 15);
if (ret.back() == '.') ret.pop_back();
while (ret.size() <= 2) ret += ret.back();
return ret;
}
1. or연산을 사용해서 tolower를 쓰지 않고 소문자로 만들었다.
2. 문자 하나하나 대입해서 비교하기보단 strchr을 사용해 일치하는 문자만 ret에 삽입했다.
3. 나는 erase함수에 length를 구해서 맨 마지막 글자를 지웠는데(length를 계속 불러서 비효율적...), pop_back()을 쓰면 더 간단했다.
4. back() 함수로 문자열의 마지막 문자를 가져올 수 있다!
https://maincodes.tistory.com/68
https://jhnyang.tistory.com/116
https://blockdmask.tistory.com/338
'Algorithm > 카카오기출' 카테고리의 다른 글
[프로그래머스]비밀지도 (0) | 2022.01.15 |
---|---|
[프로그래머스] 실패율 (0) | 2022.01.14 |
[프로그래머스]크레인 인형뽑기 게임 (0) | 2022.01.12 |
[프로그래머스] 키패드 누르기 (0) | 2022.01.11 |
[프로그래머스]숫자 문자열과 영단어 (0) | 2022.01.08 |