https://programmers.co.kr/learn/courses/30/lessons/72410
코딩테스트 연습 - 신규 아이디 추천
카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로
programmers.co.kr
단순한 구현 문제이지만 string STL의 여러 함수를 잘 응용하면 훨씬 쉽게 풀 수 있는 문제
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(string new_id) {
string answer = new_id;
// 1
for (int i=0; i<(int)answer.size(); i++) {
if (answer[i] >= 'A' && answer[i] <= 'Z') {
answer[i] += 32;
}
}
// 2
vector<int> eraseIdx;
for (int i=0; i<(int)answer.size(); i++) {
if ((answer[i] < 'a' || answer[i] > 'z') && answer[i] != '-' && answer[i] != '_' && answer[i] != '.' && (answer[i] < '0' || answer[i] > '9')) {
eraseIdx.push_back(i);
}
}
for (int i=0; i<(int)eraseIdx.size(); i++) {
answer.erase(eraseIdx[i] - i, 1);
}
// 3
bool isCom = false;
int cnt = 0;
vector<pair<int, int>> continuousCom;
for (int i=0; i<(int)answer.size(); i++) {
if (answer[i] == '.' && !isCom) {
isCom = true;
cnt++;
}
else if (answer[i] == '.' && isCom) {
cnt++;
}
else if (answer[i] != '.' && isCom) {
if (cnt > 1) {
continuousCom.push_back(make_pair(i-cnt, cnt));
}
isCom = false;
cnt = 0;
}
if (i == (int)answer.size() - 1 && isCom) {
continuousCom.push_back(make_pair(i-cnt+1, cnt));
}
}
int minus = 0;
for (int i=0; i<(int)continuousCom.size(); i++) {
answer.replace(continuousCom[i].first - minus, continuousCom[i].second , ".");
minus += continuousCom[i].second - 1;
}
// 4
if (answer.front() == '.') {
answer.erase(0, 1);
}
if (answer.back() == '.') {
answer.erase((int)answer.size() - 1, 1);
}
// 5
if (answer == "") {
answer = "a";
}
// 6
if ((int)answer.size() >= 16) {
answer.erase(15);
}
if (answer.back() == '.') {
answer.erase((int)answer.size() - 1, 1);
}
// 7
if ((int)answer.size() <= 2) {
char plus = answer.back();
while ((int)answer.size() < 3) {
answer += plus;
}
}
return answer;
}
'ALGORITHM > OTHER' 카테고리의 다른 글
[c++] 더 맵게 (프로그래머스 - heap/ priority queue) (0) | 2021.06.29 |
---|---|
[c++] 실패율 (프로그래머스 - 구현) (0) | 2021.06.22 |
[c++] 모의고사 (완전탐색) (0) | 2021.05.17 |
[c++] K번째수 (0) | 2021.05.12 |
[c++] 완주하지 못한 선수 (0) | 2021.05.11 |