https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
아스키 값 활용하여 단계별로 수행
new_id가 빈 문자열일 경우 5단계, 7단계만 수행하기 때문에 무조건 aaa 반환
각 단계별로 변환된 id 값을 tmp 에 저장
모든 단계를 마친 후 answer에 tmp의 값을 저장
while 문을 사용하여 변환 횟수를 탐지(cnt)
while문 한 번 돌 때 변환이 한번도 일어나지 않았다면 변환 완료된 경우이므로 while문 탈출 후 출력
1. 대문자의 경우 아스키 값에 32를 더한 후 char로 형변환화여 소문자로 출력
2. 아스키값 범위를 사용해서 허용된 문자가 아니면 삭제하여 저장
3, 4. 연속된 마침표를 검사하여 하나의 마침표만 출력. 해당 마침표가 시작, 끝일 경우 넘어감
5. 빈 문자열일 경우 a 저장
6. 최초 15개의 문자만 저장
7. 길이 2 이하인 id에 끝 글자를 계속 더해서 길이 3을 만듬
string solution(string new_id) {
string answer = new_id;
string tmp;
int cnt=1;
if (new_id.size() == 0) {
answer.push_back('aaa');
return answer;
}
while (cnt) {
cnt = 0;
// 1
for (int i = 0; i < answer.size();i++) {
int asc = answer[i];
if (asc <= 90 && asc >= 65) {
tmp.push_back((char)asc + 32);
cnt++;
}
else
tmp.push_back((char)asc);
}
answer.clear();
answer = tmp;
tmp.clear();
// 2
for (int i = 0; i < answer.size();i++) {
int asc = answer[i];
if (asc != 46 && asc != 45 && asc != 95 && (asc < 48 || asc>57) && (asc < 97 || asc>122)) {
cnt++;
continue;
}
else
tmp.push_back((char)asc);
}
answer.clear();
answer = tmp;
tmp.clear();
// 3+4
for (int i = 0; i < answer.size();i++) {
int asc = answer[i];
int asc2 = answer[i + 1];
if (asc == 46 && asc2 == 46) {
cnt++;
continue;
}
else {
if (asc == 46 && (tmp.empty() || answer[i + 1] == NULL)) {
cnt++;
continue;
}
tmp.push_back((char)asc);
}
}
answer.clear();
answer = tmp;
tmp.clear();
// 5
if (answer.size() == 0) {
cnt++;
answer.push_back('a');
}
// 6
if (answer.size() >= 16) {
while (answer.size() > 15) {
cnt++;
answer.pop_back();
}
}
// 7
if (answer.size() <= 2) {
while (answer.size() <= 2) {
cnt++;
answer.push_back(answer[answer.size() - 1]);
}
}
}
return answer;
}
'코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스] [1차] 추석 트래픽 C++ (0) | 2022.05.02 |
---|---|
[프로그래머스] 오픈채팅방 C++ (0) | 2022.05.02 |
[프로그래머스] 문자열 압축 C++ (0) | 2022.04.28 |
[프로그래머스] 로또의 최고 순위와 최저 순위 C++ (0) | 2022.04.28 |
[프로그래머스] 신고결과 받기 C++ (0) | 2022.04.28 |