문제
프로그래머스 코딩테스트 연습 - 신규 아이디 추천(Level 1)
2021 카카오 블라인드테스트
https://programmers.co.kr/learn/courses/30/lessons/72410
사용 알고리즘
- 문자열
풀이
문제에 제시된 순서대로 문자열을 처리한 후 반환한다.
나의 코드
#include <string>
#include <vector>
using namespace std;
string solution(string new_id) {
string answer = "";
int i, len;
char cc=0;
len = new_id.length();
for(i=0;i<len;i++){
if(new_id[i]<='Z'&&new_id[i]>='A')
new_id[i]+=32;
char c = new_id[i];
if((c>='a'&&c<='z')||(c>='0'&&c<='9')||c=='-'||c=='_'){
cc=c;
answer+=c;
}
if(c=='.'){
if(cc!='.'&&cc!=0) answer+=c, cc=c;
}
}
if(answer[answer.length()-1]=='.') answer.erase(answer.length()-1);
if(answer.length()==0) answer+='a';
if(answer.length()>15) {
answer.erase(15);
if(answer[14]=='.') answer.erase(14);
}
if(answer.length()<3){
for(int i=answer.length();i<=2;i++){
answer+=answer[answer.length()-1];
}
}
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;
}
배울 점이 많은 코드인듯
728x90
'PS > Programmers' 카테고리의 다른 글
프로그래머스 코딩테스트 연습 - x만큼 간격이 있는 n개의 숫자 (Level 1) (0) | 2021.08.24 |
---|---|
프로그래머스 코딩테스트 연습 - 문자열 내 p와 y의 개수 (Level 1) (0) | 2021.08.23 |
프로그래머스 코딩테스트 연습 - 하샤드 수(Level 1) (0) | 2021.07.27 |
프로그래머스 코딩테스트 연습 - 핸드폰 번호 가리기 (Level 1) (0) | 2021.07.26 |
프로그래머스 코딩테스트 연습 - 약수의 합(Level 1) (0) | 2021.07.20 |