티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/72410
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
// 8월 6일자 구현 중 ...
string solution(string new_id) {
/* 허용하는 소문자, 숫자, 기호가 담긴 배열 생성 */
int start_length = new_id.length();
/* 1. 대문자 -> 소문자 */
for(int i = 0; i < new_id.length(); i++){
if(new_id[i] >= 65 && new_id[i] <= 90) new_id[i] += 32;
}
/* 2. 표준 문자 제외 제거 */
for(int i = 0; i < new_id.length();){
if(!isalpha(new_id[i]) && !isdigit(new_id[i]) && new_id[i] != '-' && new_id[i] != '_' && new_id[i] != '.'){
new_id.erase(new_id.begin() + i);
}
else i++;
}
/* 3. 연속 마침표 제거 */
for(int i = 0; i < new_id.length();){
if(new_id[i] == '.' && new_id[i+1] == '.'){
new_id.erase(new_id.begin() + i);
} else i++;
}
/* 4. 양 끝단 마침표 제거 */
if(new_id[0] == '.') new_id.erase(new_id.begin());
if(new_id[new_id.length() - 1] == '.') new_id.erase(new_id.length()-1,new_id.length());
/* 5. 길이가 0이면 a 리턴 */
if(new_id.empty()) new_id.push_back('a');
/* 6. 15 이상이면 자르고 끝 부분만 "." 체크 */
if(new_id.length() > 15) new_id.erase(15,new_id.length());
if(new_id[new_id.length()-1] == '.') new_id.erase(new_id.length()-1,new_id.length());
/* 7. 길이 2 이하면 3으로 */
char last_char = new_id[new_id.length()-1];
while(new_id.length() < 3){
new_id += last_char;
}
return new_id;
}
string 제거함수인 erase사용이 익숙하다면 어렵지 않지만, 나는 그러지못했다...
허용되는 소문자, 대문자, 숫자, 특수기호 사전을 생성한 뒤 find 함수를 통해 체크하려했지만 아스키코드 변환도 머리아프고 라이브러리 검색 중 isalpha()와 isdigit()이라는 함수를 알게되어 과감히 사용.
삽질한 코드
vector<char> standard = {'-', '_', '.'};
int start_a = 97;
int start_num = 48;
for(int i = 0; i< 26; i++){
standard.push_back(start_a);
start_a++;
}
for(int i = 0; i < 10; i++){
standard.push_back(start_num);
start_num++;
}
이제와서 체크해보니 소문자, 대문자는 잘 넣어놓고, 숫자를 그대로 0~9로 입력한 뒤 find함수를 사용했었다. 덕분에 isdit()과 isalpha()를 만났으니 다음부턴 이런 짓을 안해도 될거같다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] 체육복 : C++ (0) | 2021.08.24 |
---|---|
[프로그래머스] 소수 찾기 : C++ (0) | 2021.08.15 |
[프로그래머스] 위클리 챌린지 - 2주차 : C++ (0) | 2021.08.14 |
[프로그래머스] 숫자 문자열과 영단어 : C++ (0) | 2021.08.11 |
[프로그래머스] K번째 수 : C++ (0) | 2021.08.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 환경설정
- 이클립스
- 데이터베이스
- Open API
- 오류
- SQL
- Java
- C
- 네트워크
- 개발용어
- 백준
- HeidiSQL
- 부트스트랩
- 스프링
- CSS
- JSP
- 국비교육
- 스프링부트
- CS
- 오라클
- Thymeleaf
- 넥사크로
- C++
- svn
- JVM
- 인턴
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함