어흥
[프로그래머스] 신규 아이디 추천 (C++) 본문
728x90
반응형
문제 링크: https://programmers.co.kr/learn/courses/30/lessons/72410
1. 주의할 점
- 문제의 조건을 잘 이해하고 그대로 구현한다
2. 구현
- dq 덱을에 new_id를 1차 필터링 한 결과를 담는다(특정 문자 + 연속된 . 처리 + 대문자→소문자) : 1,2,3번 조건 처리
- Cnt 변수를 통해 덱의 크기를 나타낸다
- if문을 각각 수행하여 덱의 가장 앞쪽과 뒤쪽이 . 이면 제거한다 : 4번 조건 처리
- 덱이 비었다면 'a'를 추가한다 : 5번 조건 처리
- While문을 통해 7번 조건을 처리한다
- For문을 통해 덱의 크기가 15자리를 넘어선다면 최대 15개의 문자만 가져오며, 마지막 문자가 . 인 경우에는 붙이지 않는다 : 6번 조건
#include <string>
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
string solution(string new_id) {
deque<char> dq;
string answer = "";
int len = new_id.size();
int cnt=0;
for(int i=0;i<len;i++){
char c = new_id[i];
if(('a'<=c && c<='z')||c=='-'||c=='_') dq.push_back(c);
else if('A'<=c&&c<='Z') dq.push_back(tolower(c));
else if(c=='.'){
if(cnt>0 && dq[cnt-1]=='.') continue;
else dq.push_back(c);
}
else if(0<=c-'0' && c-'0'<=9) dq.push_back(c);
else continue;
cnt++;
}
//앞쪽 제거
if(cnt && dq[0]=='.'){
dq.pop_front();
cnt--;
}
//뒤쪽 제거
if(cnt && dq[cnt-1]=='.'){
dq.pop_back();
cnt--;
}
if(dq.empty()){
dq.push_back('a');
cnt++;
}
while(cnt<3){
dq.push_back(dq[cnt-1]);
cnt++;
}
for(int i=0;i<min(cnt,15);i++){
if(i==14 && dq[i]=='.') break;
answer+=dq[i];
}
return answer;
}
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 순위 검색 (C++) (0) | 2021.09.10 |
---|---|
[프로그래머스] 메뉴 리뉴얼 (C++) (0) | 2021.09.10 |
[프로그래머스] 복서 정렬하기 (C++) (0) | 2021.09.10 |
[프로그래머스] 직업군 추천하기 (C++) (0) | 2021.08.31 |
[프로그래머스] 미로 탈출 (C++) (1) | 2021.08.31 |
Comments