728x90
반응형
프로그래머스 연습 문제 레벨 1 신규 아이디 추천
친구가 풀어보라고 추천해준 문제이다. 단계별 원하는 조건을 하나 하나 맞추다 보니 풀어지는 문제였다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void step_1(string &str) {
transform(str.begin(), str.end(), str.begin(), ::tolower);
}
void step_2(string &str) {
string temp;
for (char& c : str) {
if (islower(c) || isdigit(c) || c == '-' || c == '_' || c == '.') temp.push_back(c);
}
str = temp;
}
void step_3(string &str) {
vector<int> count;
char pre_char = str[0];
for (int i = 1; i < str.length(); i++) {
if (str[i] == '.') {
if (pre_char == str[i]) {
count.push_back(i);
}
}
pre_char = str[i];
}
for (int i = count.size() - 1; i >= 0; i--) {
str.erase(str.begin() + count[i]);
}
}
void step_4(string &str) {
if (str.front() == '.') str.erase(str.begin());
if (!str.empty()) {
if (str.back() == '.') str.erase(str.begin() + str.length() - 1);
}
}
void step_5(string &str) {
if(str.empty()) str.push_back('a');
}
void step_6(string &str) {
while (str.length() > 15) {
str.pop_back();
}
while (str.back() == '.') {
str.pop_back();
}
}
void step_7(string &str) {
while (str.length() < 3) {
str.push_back(str[str.length() - 1]);
}
}
string solution(string new_id) {
string answer = new_id;
if (!answer.empty()) step_1(answer);
if (!answer.empty()) step_2(answer);
if (!answer.empty()) step_3(answer);
if (!answer.empty()) step_4(answer);
step_5(answer);
step_6(answer);
step_7(answer);
return answer;
}
1단계 부터 7단계 가지 순차적으로 동작하도록 만들었는데 다른 사람들 풀이를 보니 굳이 그렇게 하지 않아도 됐던 것 같다.
728x90
반응형
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[Level 1, C++] 3진법 뒤집기 (0) | 2022.07.03 |
---|---|
[Level 1, C++] 약수의 개수와 덧셈 (0) | 2022.07.03 |
[Level 1, C++] K번째수 (0) | 2022.07.03 |
[Level 1, C++] 소수 만들기 (0) | 2022.07.03 |
[Level 1] 없는 숫자 더하기 (0) | 2022.07.03 |