Programmers/Level 1
C++ / 프로그래머스 / 신규 아이디 추천
GitHubSeob
2021. 8. 15. 21:51
문제
https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
문제풀이
문제는 길지만 단계 하나씩 코드를 작성하면 쉽게 풀 수 있다.
먼저 알파벳, 숫자, -, _, . 일 때만 answer벡터에 push 한다.
answer의 끝, 끝-1 부분이 . 이라면 끝부분을 지워 .가 하나만 있게 한다.
맨앞이 .이라면 erase를 통해 벡터 맨 앞 원소만 지운다.
맨뒤가 .일때도 마찬가지이다.
answer베터가 비어있다면 a를 push 한다.
사이즈가 16 이상이라면 resize를 해서 사이즈를 15로 줄인다.
맨뒤에 . 있는지 여부를 한 번 더 체크한다.
만약 answer의 사이즈가 3 미만이라면 answer.back을 push 하여 사이즈가 3이 되도록 한다.
코드
#include <string>
#include <vector>
#include <cctype>
using namespace std;
string solution(string new_id) {
string answer = "";
for (int i = 0; i < new_id.size(); ++i) {
new_id[i] = tolower(new_id[i]);
if ((new_id[i] >= 'a' && new_id[i] <= 'z') || (new_id[i] >= '0' && new_id[i] <= '9') || new_id[i] == '_' || new_id[i] == '.' || new_id[i] == '-')
answer.push_back(new_id[i]);
if (i >= 1)
if (answer[answer.size() - 1] == '.' && answer[answer.size() - 2] == '.')
answer.pop_back();
}
if (answer.front() == '.') answer.erase(answer.begin());
if (answer.back() == '.')answer.pop_back();
if (answer.empty()) answer.push_back('a');
if (answer.size() >= 16) answer.resize(15);
if (answer.back() == '.') answer.pop_back();
while (answer.size() < 3) answer.push_back(answer.back());
return answer;
}