-
[프로그래머스] 신규 아이디 추천Algorithm/문자열 2021. 11. 29. 16:23728x90
- 카카오 2021 코딩테스트 기출문제 1번, 정답률이 57퍼정도였던 문제이다. 꼭 맞춰주어야 하는 문제이다
- 먼저, 대문자를 소문자로 변환한다. 이 과정에서는 isupper, tolower 함수를 사용한다.
- 다음으로, islower, isdigit을 통해 소문자, 숫자, 빼기, 밑줄, 마침표만을 추가한다.
- 세 번째로, 마침표가 2번 이상 연속된 부분을 제거하는데, 이는 new_id에 하나씩 push를 하면서 new_id의 맨 마지막 글자가 '.'이고, 삽입할 글자도 '.'이라면 skip하는 식으로 구현을 한다.
- 다음으로, 끝 마침표를 제거한다. 처음 마침표는 이미 전 단계에서 제거되었으므로 따로 구현할 필요가 없다.
- 5단계도 쉽게 진행하면 되고, 6단계는 substr(인덱스, 추출할 문자 개수)를 통해 조건을 만족시키면 된다.
- 마지막 단계도 while문과 back을 통해 쉽게 구현 해 주면 된다.
#include <string> #include <cctype> using namespace std; string solution(string new_id) { string tmp =""; for (char &c : new_id) if (isupper(c)) c = tolower(c); for (char c : new_id) { if(islower(x) || isdigit(x) || x == '-' || x == '_' || x == '.') tmp += c; } new_id = ""; for (int i = 0; i < tmp.size(); i++) if (tmp[i] != '.' || (!new_id.empty() && new_id.back() != '.')) new_id += tmp[i]; if (new_id.back() == '.') new_id.pop_back(); if (new_id.empty()) new_id.push_back('a'); if (new_id.size() >= 16) new_id = new_id.substr(0, 15); while (new_id.back() == '.') new_id.pop_back(); while (new_id.size() <= 2) new_id += new_id.back(); return new_id; }
'Algorithm > 문자열' 카테고리의 다른 글
백준 5430 AC (0) 2021.11.22 [프로그래머스] 문자열 압축 (0) 2021.09.20 [Codility - Iteration] BinaryGap (0) 2021.09.16