Programming Practice/PROGRAMMERS
[PG] 신규 아이디 추천 - Lv.1
Cage
2022. 6. 12. 19:14
문제
* 해당 문제의 모든 저작권은 프로그래머스 측에 있으며 본 블로그는 학업 흔적을 남겨 학업 상향을 위한 블로그로 이익을 추구하지 않으며 프로그래머스 측의 약관을 위배하지 않음을 명시합니다.*
https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
풀이
1레벨의 문제인만큼 단계별로 구현을 할 수 있게 친절히 설명이 적혀있습니다.
별도의 어려운 구현이 필요하지는 않으나 문자열에 대해 이해도가 부족하면 힘들 수 있겠다 싶은 문제입니다.
자기 자신의 문자열 이해도를 점검하는 좋은 문제입니다.
소스 코드
#include <string>
#include <iostream>
#include <vector>
using namespace std;
string solution(string new_id) {
string answer = new_id;
int cnt = 0;
int flag = 0;
// 1단계
for(int i = 0; i < answer.size(); i++) {
if(answer[i] >= 65 && answer[i] <= 90)
answer[i] += 32;
}
cout << "1단계 : " << answer << '\n';
// 2단계
for(int i = 0; i < answer.size(); i++) {
if(isdigit(answer[i]) || islower(answer[i]) || answer[i] == '-' || answer[i] == '_' || answer[i] == '.')
continue;
else {
answer.erase(i, 1);
i--;
}
}
cout << "2단계 : " << answer << '\n';
// 3단계
for(int i = 0; i < answer.size(); i++) {
if(answer[i] == '.') {
for(int j = i+1; j < answer.size(); j++) {
if(answer[j] == '.')
cnt++;
else
break;
}
answer.erase(i, cnt);
cnt = 0;
}
}
cout << "3단계 : " << answer << '\n';
// 4단계
if (answer[0] == '.')
answer.erase(answer.begin() + 0);
if (answer[answer.size()-1] == '.')
answer.erase(answer.end() - 1);
cout << "4단계 : " << answer << '\n';
// 5단계
if(answer.size() == 0) {
answer += 'a';
}
cout << "5단계 : " << answer << '\n';
// 6단계
if(answer.size() >= 16) {
answer.erase(answer.begin() + 15, answer.end());
}
if (answer[answer.size()-1] == '.')
answer.erase(answer.end() - 1);
cout << "6단계 : " << answer << '\n';
// 7단계
if(answer.size() <= 2) {
char temp = answer[answer.size() - 1];
while(answer.size() != 3) {
answer += temp;
}
}
cout << "7단계 : " << answer << '\n';
return answer;
}